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;

相关推荐
偷星星的贼1117 分钟前
数据分析与科学计算
jvm·数据库·python
Suchadar39 分钟前
数据库DATABSE——sql server
数据库
檀越剑指大厂1 小时前
迁移之路的隐形陷阱:破解Oracle数据库国产化替代的核心痛点与策略
数据库·oracle
wWYy.2 小时前
详解redis(1)
数据库·redis·缓存
todoitbo2 小时前
Oracle 迁移到 KingbaseES:从问题词到成本的技术拆解
数据库·oracle·kingbasees
会游泳的石头2 小时前
Java 异步事务完成后的监听器:原理、实现与应用场景
java·开发语言·数据库
数智工坊2 小时前
【操作系统-IO调度】
java·服务器·数据库
星梦清河2 小时前
MySQL—分组函数
数据库·mysql
霖霖总总3 小时前
[小技巧33]MySQL 事务持久化的一致性保障:binlog 与 redo log 的两阶段提交机制解析
数据库·mysql
九章-3 小时前
2026国产向量数据库选型新趋势:融合架构如何支撑AI与信创双轮驱动
数据库·向量数据库