`

日初将TN表数据同步到T0表

 
阅读更多

最近参与了一个项目,发现里面的代码程序写的好厉害大笑,摘取下来以便学习。

create or replace function DATA_TN_2_T0(
P_INIT_DATE NUMBER(10),-----交易日期
P_ERROR_NO OUT NUMBER(10),----错误代码
P_ERROR_INFO OUT VARCHAR2(100)-----错误信息
)
RETURN NUMBER AS
V_ROWCOUNT NUMBER(10);----记录数
V_COLUMNSTR VARCHAR2(4000);-----数据表属性
V_SQLSTR VARCHAR2(4000);  -----执行的sql语句
V_WHERESTR VARCHAR2(4000); -----where条件

BEGIN
   FOR V_CUR IN (  
       SELECT USER_NAME,
              TABLE_NAME,   
              BAK_TABLE_NAME,
              REMARK,
              WHERE_STR,
              INDEX_MODE
              FROM BAKCONFIG  ----从配置表里面查询需要同步的TN表及对应的T0表,及用户名等
              WHERE ...
            )LOOP
     SELECT COUNT(*) INTO V_ROWCOUNT
     FROM ALL_ALL_TABLES
     WHERE UPPER(OWNER)=UPPER(V_CUR.USER_NAME)
     AND UPPER(TABLE_NAME)=UPPER(V_CUR.BAK_TABLE_NAME);----查询用户是否有操作该数据表的权限
     IF V_ROWCOUNT>0 THEN
        BEGIN
        V_COLUMNSTR :=' ';
        FOR V_COLUMN IN (
           SELECT U.COLUMN_NAME
              FROM (SELECT COLUMN_NAME FROM ALL_TAB_COLUMNS 
                  WHERE UPPER(OWNER)=UPPER(V_CUR.USER_NAME)
                  AND TABLE_NAME=UPPER(V_CUR.TABLE_NAME))U,
                   (SELECT COLUMN FROM ALL_TAB_COLUMNS
                  WHERE UPPER(OWNER)=UPPER(V_CUR.USER_NAME)
                  AND TABLE_NAME=UPPER(V_CUR.BAK_TABLE_NAME))L
             WHERE U.COLUMN_NAME=L.COLUMN_NAME  ---找出TN与T0表共有的属性
           )LOOP
          ----拼接成字符串
          V_COLUMNSTR:=V_COLUMNSTR || V_COLUMN.COLUMN_NAME || ',';
          END LOOP;
          V_COLUMNSTR:=SUBSTR(V_COLUMNSTR,2,LENGTH(V_COLUMNSTR)-2);
         ----获取表的索引处理
         IF V_CUR.INDEX_MODE='1' THEN
           INSERT INTO TMP_INDEX(INDEX_NAME,USER_NAME,TABLE_NAME,REMARK)
           SELECT INDEX_NAME,TABLE_OWNER,TABLE_NAME,
           DBMS_METADATA.GET_DDL('INDEX',INDEX_NAME,TABLE_OWNER)
           FROM USER_INDEXES
           WHERE TABLE_OWNER=V_CUR.USER_NAME
           AND TABLE_NAME=UPPER(V_CUR.BAK_TABLE_NAME);
        END IF;
      ---删除T0表数据
      EXECUTE IMMEDIATE 'TRUNCATE TABLE '|| V_CUR.USER_NAME ||'.'||
      UPPER(V_CUR.BAK_TABLE_NAME);
      ----删除表索引
      FOR IDX_CUR IN(SELECT * FROM TMP_INDEX)LOOP
      V_SQLSTR:='DROP INDEX '|| IDX_INDEX.USER_NAME ||'.'||IDX_CUR.INDEX_NAME;
      EXECUTE IMMEDIATE V_SQLSTR;
      END LOOP;
      ----处理where条件
      IF RITRIM(V_CUR.WHERE_STR) IS NOT NULL THEN
        V_WHERESTR:='WHERE'||V_CUR.WHERE_STR;
      ELSE
        V_WHERESTR:=' ';
      END IF;
      -----将日期换成当前的交易日
      V_WHERESTR:=REPLACE(V_WHERESTR,'#INIT_DATE#',P_INIT_DATE);
      ------拼接执行语句  
      V_SQLSTR:='INSERT /*+APPEND*/INTO '|| V_CUR.USER_NAME ||'.'||
                UPPER(V_CUR.BAK_TABLE_NAME)||'nologging('||
                V_COLUMNSTR || ')'||'SELECT '|| V_COLUMNSTR||
                ' FROM  '||V_CUR.USER_NAME ||'.'||
                V_CUR.TABLE_NAME || V_WHERESTR;
      ------执行语句
      EXECUTE IMMEDIATE V_SQLSTR;
      ----创建索引
      FOR IDX_CUR IN (SELECT * FROM TMP_INDEX)LOOP
          V_SQLSTR:=IDX_CUR.REMARK;
          EXECUTE IMMEDIATE V_SQLSTR;
      END LOOP;
      EXECUTE IMMEDIATE 'TRUNCATE TABLE TMP_INDEX';
      COMMIT;
    END;
   END IF;
 END LOOP;
 COMMIT;
 RETURN (0);
 EXCEPTION
     WHEN OTHERS THEN
     ROLLBACK;
     P_ERROR_NO     :=101;
     P_ERROR_INFO  :='执行存储过程错误'||'DATA_TN_2_T0';
     RETURN (P_ERROR_NO);
END; 
 
分享到:
评论

相关推荐

    AT070TN94_AT070TN94的数据手册_

    AT070TN94是一款常见的液晶显示屏模块,主要应用于电子设备如智能手机、平板电脑、车载显示屏等。...通过仔细阅读和理解这份手册,开发者可以有效地将AT070TN94集成到各种电子设备中,实现高质量的显示效果。

    群创AT070TN83 LCD液晶屏数据手册

    群创AT070TN83 LCD液晶屏是一款由群创电子生产的老型号液晶显示屏,其详细规格可以在群创AT070TN83的数据手册中找到。该手册最后一次修订是在2007年,其中包含有液晶屏的技术参数、接口定义、操作规范以及可靠性测试...

    AT070TN94.rar_AT070TN94开发_AT070TN94电源_SCH_at070tn94_原理图

    它是一种专用的触摸屏控制器,能够检测到用户对屏幕的触控,并将这些触控信息转化为可识别的数据。这种控制器通常包括信号调理电路、A/D转换器以及处理这些信号的微控制器单元(MCU)。AT070TN94的特点在于其能在...

    TN901资料与例程_tn901_tn901例程_tn901传感器_

    开发者可以通过这些代码了解如何与传感器通信,以及如何解析返回的数据,从而将TN901传感器集成到自己的项目中。 5. **应用范围** TN901传感器广泛应用于各种场景,如: - 安全监控:例如,入侵检测系统和门窗...

    厦华TN3483 数据

    2J10030 24C16 厦华TN3483 2J10030 24C16 北京松下管。这是实机copy下来的。

    AT070TN92原理图

    AT070TN92通常采用LVDS(低电压差分信号)接口进行数据传输,确保了数据传输的稳定性和高速性。 #### 原理图关键组件解析 在给定的AT070TN92原理图中,我们可以看到多个关键组件和引脚定义: 1. **LVDS接口**:...

    群创7寸屏AT070TN92手册

    - **数据输入格式**:规定数据输入的格式要求,以便于外部设备的数据传输。 - **时序**:包括扫描频率、同步信号要求等,确保画面稳定流畅。 ##### 5. 光学特性 - 包括对比度、亮度、视角等参数,确保屏幕具有良好...

    tn_kernel 实时操作系统

    在tn_kernel的压缩包中,"Kernel"文件可能是源代码或者编译后的二进制文件,开发者可以通过阅读源码理解其内部工作机制,或者直接将其烧录到八位单片机中进行运行。 总的来说,tn_kernel是一款为八位单片机量身定制...

    群创 AT070TN90 SPECIFICATION

    本文将基于给定的技术参数文档,深入解析群创AT070TN90的主要特性与技术指标。 #### 基本参数 群创AT070TN90属于TN(Twisted Nematic)类型的LCD面板,这类面板具有成本效益高、响应速度快等特点,适合显示文字和...

    EPC2-6SE-5TN144数据手册

    根据提供的文档信息,我们可以深入解析Lattice公司的EPC2-6SE-5TN144 FPGA的数据手册,进一步了解这款产品的特性和应用领域。 ### 一、产品概述 EPC2-6SE-5TN144是一款由Lattice半导体公司推出的现场可编程门阵列...

    TN905/TN901红外测温模块STM32程序

    描述中提到的“无线红外测温模块TN901/TN905测试程序,STM32F103”,表明这个项目不仅包括红外测温功能,还具备无线通信能力,可能是通过蓝牙或Wi-Fi等无线技术将温度数据传输到其他设备。STM32F103是STM32家族中的...

    用ASP.NET在同一网页中显示主从关系表的相关数据

    ### 用ASP.NET在同一网页中显示主从关系表的相关数据 #### 方法概述 在ASP.NET中,为了实现在同一网页上直观地展示具有主从关系的数据表,可以通过一系列的编程技巧来达到目的。这种方法主要是利用ASP.NET提供的...

    TN5250.rar

    TN5250是一款用于连接到IBM AS/400(现在称为IBM iSeries或IBM System i)系统的终端模拟器软件。这个名为"TN5250.rar"的压缩包包含了一些关键组件,使得用户可以在个人计算机上模拟AS/400的5250终端界面,以便访问...

    LPC1788 AT070TN92 液晶驱动

    - DMA同步:避免在DMA传输过程中修改缓冲区,以防止数据错乱。 - 功耗管理:根据设备状态调整LCD的亮度,甚至在空闲时关闭背光以节省电源。 5. **AT070TN92特定特性**: - AT070TN92支持多种显示模式,包括静态...

    tn3399_V3原理图

    HDMI端口是该原理图的主要组件之一,负责将图像信号传输到显示设备。该部分使用了HDMI_TX0P、HDMI_TX0N、HDMI_TX1P、HDMI_TX1N、HDMI_TX2P、HDMI_TX2N等信号线,实现了图像信号的传输。同时,HDMI_CEC信号线用于控制...

    凌阳TN红外模组使用手册

    凌阳TN红外模组是一款由凌阳科技设计的红外通信模块,主要应用于各种电子设备间的无线数据传输。这款模组采用高效能的红外技术,能够实现高速、稳定的数据传输,适用于智能家居、遥控器、物联网设备等多种场景。在...

    tn901测温模块驱动程序

    5. 驱动集成:将驱动程序整合到操作系统或应用框架中,如Linux内核模块或Windows驱动模型。 在实际应用中,tn901测温模块常被用于各种场景,如: 1. 工业自动化:监控生产线上的温度,确保工艺过程的稳定。 2. ...

    TN94规格书

    - **定时**:说明了信号之间的定时关系,如时钟信号与数据信号之间的同步。 #### 4. 光学规格 这部分详细描述了显示器的光学性能指标,如亮度、对比度、视角等,对于评估显示质量至关重要。 #### 5. 可靠性测试...

Global site tag (gtag.js) - Google Analytics