建表的存储过程
下面是建表的存储过程,用途:通过不同的表,根据不同过滤条件,得到某个字段,例如neid,然后创建一个新表T,表T的表名为拼接XXXX_XXX_neid,表T的字段自行添加
- xxx:命名存储过程名称,例如:create_table
- 表A :例如:表user
- 条件A :例如:select ne_id from user
CREATE OR REPLACE PROCEDURE XXX存储名(p_table_name IN VARCHAR2) IS
-- 定义变量来存储动态 SQL 查询
v_sql_query VARCHAR2(1000);
-- 定义一个游标来获取符合条件的 neid
TYPE t_neid IS REF CURSOR;
c_neid t_neid;
-- 定义变量来存储表名
v_table_name VARCHAR2(100);
BEGIN
-- 根据传入的表名构建动态 SQL 查询
IF p_table_name = '表A' THEN
v_sql_query := '条件A';
ELSIF p_table_name = '表B' THEN
v_sql_query := '条件B';
ELSIF p_table_name = '表C' THEN
v_sql_query := '条件C';
ELSE
RAISE_APPLICATION_ERROR(-20001, 'Invalid table name: ' || p_table_name);
END IF;
-- 打开动态游标
OPEN c_neid FOR v_sql_query;
-- 循环遍历游标中的每一行
LOOP
FETCH c_neid INTO v_table_name;
EXIT WHEN c_neid%NOTFOUND;
-- 构建表名
v_table_name := 'XXXX_XXX_' || v_table_name;
-- 检查表是否存在
DECLARE
v_count NUMBER;
BEGIN
SELECT COUNT(*)
INTO v_count
FROM user_tables
WHERE table_name = UPPER(v_table_name);
-- 如果表不存在,则创建表
IF v_count = 0 THEN
EXECUTE IMMEDIATE 'CREATE TABLE ' || v_table_name || ' (
XXX VARCHAR2(512),
XXX VARCHAR2(32),
XXX VARCHAR2(32),
XXX VARCHAR2(128),
XXX VARCHAR2(64)
)';
DBMS_OUTPUT.PUT_LINE('Table ' || v_table_name || ' created.');
ELSE
DBMS_OUTPUT.PUT_LINE('Table ' || v_table_name || ' already exists.');
END IF;
END;
END LOOP;
-- 关闭游标
CLOSE c_neid;
END create_alarm_his_table;