建表的存储过程
下面是建表的存储过程,用途:通过不同的表,根据不同过滤条件,得到某个字段,例如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;