当前位置: 首页 > article >正文

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;

http://www.kler.cn/a/420216.html

相关文章:

  • 039集——渐变色之:CAD中画彩虹()(CAD—C#二次开发入门)
  • koa中间件
  • Profinet转EtherNet/IP网关是如何解决西门子S7-1500PLC与AB PLC的通讯问题的
  • 基于单片机的WIFI、语音、储存、时钟、闹钟、定位系统
  • 安装SQL Server 2022提示需要Microsoft .NET Framework 4.7.2 或更高版本
  • 算法刷题Day7: 二叉树前中后遍历
  • YOLOv11改进,YOLOv11添加SAConv可切换空洞卷积,二次创新C3k2结构
  • Dockerfile 安装echarts插件给java提供服务
  • animate.css和wow.js结合使用实现动画效果
  • 【Windows 11专业版】使用问题集合
  • .net —— Razor
  • 自签发证书配置 HTTPS 单向双向验证
  • 第三方Cookie的消亡与Google服务器端标记的崛起
  • 详解HTML5语言
  • 鸿蒙Next网络请求和解析
  • node.js基础学习-crypto模块-加密解密(九)
  • Java项目实战II基于微信小程序的亿家旺生鲜云订单零售系统的设计与实现(开发文档+数据库+源码)
  • [代码随想录06]哈希表的使用,有效字母异位词,两数组交集,快乐数,两数之和
  • 分层图最短路
  • BGP通过route-policy路由策略调用ip-prefix网络前缀实现负载均衡与可靠性之AS-path属性
  • ES6中,Set和Map的区别
  • 对载入的3dtiles进行旋转、平移和缩放变换。
  • 解决git clone与git push出现的若干问题:Failed to connect to github.com port 443: Timed out
  • tauri使用github action打包编译多个平台arm架构和inter架构包踩坑记录
  • 2024免费天气接口(无废话版)
  • 数据增强方法