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;

相关推荐
Knight_AL13 分钟前
MySQL 中 UPDATE 语句的执行过程全解析
数据库·mysql
yngsqq23 分钟前
兰顿蚂蚁——CAD二次开发
数据库
梁萌1 小时前
ShardingSphere分库分表实战
数据库·mysql·实战·shardingsphere·分库分表
川石课堂软件测试2 小时前
Mysql中触发器使用详详详详详解~
数据库·redis·功能测试·mysql·oracle·单元测试·自动化
鹏说大数据2 小时前
数据治理项目实战系列6-数据治理架构设计实战,流程 + 工具双架构拆解
大数据·数据库·架构
唯余旧忆2 小时前
【数据写入】达梦数据库(dm8)merge into写入时序数据速度慢的问题处理
数据库
小二·2 小时前
MyBatis基础入门《十四》多租户架构实战:基于 MyBatis 实现 SaaS 系统的动态数据隔离
数据库·架构·mybatis
白衣衬衫 两袖清风3 小时前
SQL联查案例
数据库·sql
ShirleyWang0123 小时前
VMware如何导入vmdk文件
linux·数据库
gugugu.3 小时前
Redis Set类型完全指南:无序集合的原理与应用
数据库·windows·redis