Oracle 建表的存储过程

发布于:2024-12-07 ⋅ 阅读:(30) ⋅ 点赞:(0)

建表的存储过程

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

网站公告

今日签到

点亮在社区的每一天
去签到