Oracle 建表的存储过程

建表的存储过程

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

相关推荐
lzhdim1 小时前
SQL 入门 12:SQL 视图:创建、修改与可更新视图
java·大数据·服务器·数据库·sql
2301_795099741 小时前
让 CSS Grid 自适应容器尺寸的动态布局方案
jvm·数据库·python
FQNmxDG4S2 小时前
Maven依赖管理:版本冲突解决与生命周期控制
java·数据库·maven
热爱运维的小七2 小时前
告别内存溢出:ActiveMQ 性能诊断与全流程优化
数据库·it运维·activemq·devops
@小柯555m2 小时前
MySql(高级操作符--操作符混合运用)
数据库·sql·mysql
CDN3602 小时前
排查实录:网站偶发502/504错误?360CDN回源超时配置与日志分析技巧
前端·数据库
bzmK1DTbd2 小时前
JDBC编程规范:PreparedStatement与事务管理
数据库·python·eclipse
卧室小白3 小时前
Redis-哨兵模式
数据库·redis·缓存
GottdesKrieges3 小时前
OceanBase恢复常见问题
java·数据库·oceanbase