`

oracle_package\packeage body

阅读更多

 

---Package

CREATE OR REPLACE PACKAGE TEST_PACKAGE is
	
	-- Author  :  
	-- Created :  
	-- Purpose :  
	/*==================================================================================
	* 功能描述: 写数据库日志
	*=================================================================================*/
	PROCEDURE INSERTlOG(log_person     in VARCHAR2,
				log_class      in VARCHAR2,
				log_method     in VARCHAR2,
				log_info       in VARCHAR2,
				log_error_code in VARCHAR2);
				
END TEST_PACKAGE;
/

GRANT EXECUTE ON TEST.TEST_PACKAGE TO R_TEST_EXEC;

 

 ------Package Body

---Package body的模板
CREATE OR REPLACE PACKAGE BODY TEST_PACKAGE IS
	
	TYPE T_TEST_SEND_INFO IS RECORD(
		ID_TEST_SEND_INFO  INF_WECHAT_SEND_INFO.ID_WECHAT_SEND_INFO%TYPE,
		ROW_ID             ROWID
	);
	
	TYPE TBL_TEST_SEND_INFO IS TABLE OF T_TEST_SEND_INFO INDEX BY BINARY_INTEGER;
	
	----以行插入
	PROCEDURE SAVE_TEST_SEND_INFO(V_TEST_SEND_INFO TBL_TEST_SEND_INFO,
                                    O_MSG OUT VARCHAR2) IS
	    BULK_ERRORS EXCEPTION;
	    PRAGMA EXCEPTION_INIT(BULK_ERRORS, -24381);
    BEGIN
    	FORALL INDX IN INDICES OF V_TEST_SEND_INFO SAVE EXCEPTIONS
      		INSERT INTO INF_TEST_SEND_INFO
					       (ID_TEST_SEND_INFO,
					       ROWID)
					      VALUES
					       (V_TEST_SEND_INFO(INDX).ID_TEST_SEND_INFO,
					        V_TEST_SEND_INFO(INDX).ROW_ID);
					        
     	FORALL INDX IN INDICES OF V_TEST_SEND_INFO SAVE EXCEPTIONS
        	DELETE FROM INF_TEST_SEND_INFO WHERE ROWID=V_TEST_SEND_INFO(INDX).ROW_ID;
    EXCEPTION
    	WHEN BULK_ERRORS THEN
            IF O_MSG IS NULL THEN
                O_MSG := '插入到微信发送状态流水表异常' || SQLCODE || SUBSTR(SQLERRM, 1, 200);
            END IF;
	END SAVE_TEST_SEND_INFO;
	
	/************************************
	---批量将U数据添加到表中
	************************************/
	PROCEDURE SAVE_TO_TEST_SEND_INFO(O_MSG OUT VARCHAR2) IS
	    -- 游标行类型
	    VTBL_TEST_SEND_INFO TBL_TEST_SEND_INFO;
	    -- 游标
	    CURSOR CS_TEST_SEND_INFO IS
	    SELECT SYS_GUID() ID_TEST_SEND_INFO,
               ROWID ROW_ID
      	  FROM TEST_SEND_INFO I
         WHERE I.ID_TEST_SEND_INFO IS NOT NULL;

	BEGIN
		-- 打开游标
	    OPEN CS_TEST_SEND_INFO;
	    <<LP_CL_MAIN>>
	    LOOP
	         FETCH CS_TEST_SEND_INFO BULK COLLECT INTO VTBL_TEST_SEND_INFO LIMIT 1000;
	         -- 每1000行保存一次
	         SAVE_TEST_SEND_INFO(VTBL_TEST_SEND_INFO,O_MSG);
	         COMMIT;
	         -- 每1000行提交一次
	         EXIT LP_CL_MAIN WHEN CS_TEST_SEND_INFO%NOTFOUND;
	    END LOOP LP_CL_MAIN;
        -- 关闭游标
        CLOSE CS_TEST_SEND_INFO;
	END SAVE_TO_TEST_SEND_INFO;
	
	----插入日志
	PROCEDURE INSERTlOG(log_person     in VARCHAR2,
                      log_class      in VARCHAR2,
                      log_method     in VARCHAR2,
                      log_info       in VARCHAR2,
                      log_error_code in VARCHAR2) is
	  logPerson varchar2(100);
	begin
		IF (log_person IS NULL) THEN
			logPerson := 'SYSTEM';
		ELSE
			logPerson := log_person;
	END IF;
  
	insert into TEST.TEST_COMM_LOG
      (ID_COMM_LOG,
       LOG_PERSON,
       LOG_CLASS,
       LOG_METHOD,
       LOG_INFO,
       LOG_ERROR_CODE,
       LOG_TIME)
    values
      (SYS_GUID(),
       logPerson,
       log_class,
       log_method,
       log_info,
       log_error_code,
       sysdate);
    commit;
  end;
  
  
  
  


END TEST_PACKAGE;
/

 ----triger

--创建数据时CREATED_BY,CREATED_DATE,UPDATED_BY,UPDATED_DATE自动赋值 
CREATE OR REPLACE TRIGGER BUSSINESS_BI
   BEFORE INSERT ON TEST_BUSSINESS
   FOR EACH ROW
DECLARE
   V_TRIGGER_USER_CREATED VARCHAR2(100);
   V_TRIGGER_USER_UPDATED VARCHAR2(100);
   V_TRIGGER_DATE         DATE;
   
   V_STATUS TEST.TR_SWITCH.STATUS%TYPE;
   CURSOR C_SWITCH(CP_SWITCH TEST.TR_SWITCH.SWITCH_FOR%TYPE) IS
      SELECT STATUS 
        FROM PADINFODATA.TR_SWITCH
       WHERE TRIGGER_NAME = 'INF_BUSSINESS_BI'
         AND SWITCH_FOR   = CP_SWITCH;  

   V_SQLCODE       VARCHAR2(6);
   V_SQLERRM       VARCHAR2(200);
   V_ERROR_COMMENT VARCHAR2(300);
BEGIN
   V_ERROR_COMMENT := 'BEFORE GET_USER';

   --SET CREATED_BY
   IF :NEW.CREATED_BY IS NULL THEN
      V_TRIGGER_USER_CREATED := USER;
   ELSE
      V_TRIGGER_USER_CREATED := :NEW.CREATED_BY;
   END IF;

   --SET UPDATED_BY
   IF :NEW.UPDATED_BY IS NULL THEN
       V_TRIGGER_USER_UPDATED := V_TRIGGER_USER_CREATED;
   ELSE
       V_TRIGGER_USER_UPDATED := :NEW.UPDATED_BY;
   END IF;

   V_TRIGGER_DATE := SYSDATE;

   --需求来源:表中记录的审计字段信息的更新
   --功能描述:用于保证审计信息的完整性 和一致性
   V_ERROR_COMMENT:='BEFORE NETS_INSERT_AUDIT';
   OPEN C_SWITCH('NETS_INSERT_AUDIT');       --获取子功能控制信息
   FETCH C_SWITCH INTO V_STATUS;
   IF C_SWITCH%FOUND AND V_STATUS = '1' THEN
      :NEW.CREATED_DATE := V_TRIGGER_DATE;
      :NEW.UPDATED_DATE := V_TRIGGER_DATE;
      :NEW.CREATED_BY   := V_TRIGGER_USER_CREATED;
      :NEW.UPDATED_BY   := V_TRIGGER_USER_UPDATED;
   END IF;
   CLOSE C_SWITCH;

   --出错处理。触发器执行有误,将出错信息插入到tr_error_log表
   EXCEPTION
      WHEN OTHERS THEN
      V_SQLCODE := SQLCODE;
      V_SQLERRM := SUBSTR(SQLERRM,1,200);
      INSERT INTO TEST.TR_ERROR_LOG
                 (ERROR_NO          ,         --系统错误代码
                  ERROR_MESSAGE     ,         --系统错误信息
                  TRIGGER_NAME      ,         --出错的trigger
                  TRIGGER_USER      ,         --出错的用户
                  TRIGGER_DATE      ,         --出错的时间
                  ERROR_COMMENT               --出错详细信息
                  )
                  VALUES
                 (V_SQLCODE,
                  V_SQLERRM,
                  'INF_BUSSINESS_BI',
                  V_TRIGGER_USER_CREATED,
                  V_TRIGGER_DATE,
                  V_ERROR_COMMENT
                  );
END;
/ 

 

 

 

 ------

 

 ------

 ------

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    openssh-8.6p1rpm包

    openssh-8.6p1_rpm_packeage.zip

    Python packeage

    个人所用Python package

    eslint-config:CLEO.one的ESLint配置

    packeage.json { " devDependencies " : { " babel-eslint " : " 9.0.0 " , " eslint " : " ^5.16.0 " , " eslint-config-cleo-one " : " ^1.0.0 " , " eslint-config-prettier " : " ^4.1.0 " , " eslint-...

    YOLOv8中加入CBAM注意力机制

    YOLOv8中加入CBAM注意力机制,适合目标检测方向新手小白对YOLOv8作出改进,开箱即用,上传不易,小伙伴拿走的同时请顺手一键三连哈

    高分项目 基于STM32单片机的语音导盲系统设计源代码+原理图+项目资料齐全+教程文档.zip

    【资源概览】 高分项目 基于STM32单片机的语音导盲系统设计源代码+原理图+项目资料齐全+教程文档.zip高分项目 基于STM32单片机的语音导盲系统设计源代码+原理图+项目资料齐全+教程文档.zip高分项目 基于STM32单片机的语音导盲系统设计源代码+原理图+项目资料齐全+教程文档.zip 【资源说明】 高分项目源码:此资源是在校高分项目的完整源代码,经过导师的悉心指导与认可,答辩评审得分高达95分,项目的质量与深度有保障。 测试运行成功:所有的项目代码在上传前都经过了严格的测试,确保在功能上完全符合预期,您可以放心下载并使用。 适用人群广泛:该项目不仅适合计算机相关专业(如电子信息、物联网、通信工程、自动化等)的在校学生和老师,还可以作为毕业设计、课程设计、作业或项目初期立项的演示材料。对于希望进阶学习的小白来说,同样是一个极佳的学习资源。 代码灵活性高:如果您具备一定的编程基础,可以在此代码基础上进行个性化的修改,以实现更多功能。当然,直接用于毕业设计、课程设计或作业也是完全可行的。 欢迎下载,与我一起交流学习,共同进步!

    HTML+CSS+JS精品网页模板H78.rar

    HTML+CSS+JS精品网页模板,设置导航条、轮翻效果,鼠标滑动效果,自动弹窗,点击事件、链接等功能;适用于大学生期末大作业或公司网页的设计制作。响应式网页,可以根据不同的设备屏幕大小自动调整页面布局; 支持如Dreamweaver、HBuilder、Text 、Vscode 等任意html编辑软件进行编辑修改; 支持包括IE、Firefox、Chrome、Safari主流浏览器浏览; 下载文件解压缩,用Dreamweaver、HBuilder、Text 、Vscode 等任意html编辑软件打开,只需更改源代码中的文字和图片可直接使用。图片的命名和格式需要与原图片的名字和格式一致,其他的无需更改。如碰到HTML5+CSS+JS等专业技术问题,以及需要对应行业的模板等相关源码、模板、资料、教程等,随时联系博主咨询。 网页设计和制作、大学生网页课程设计、期末大作业、毕业设计、网页模板,网页成品源代码等,5000+套Web案例源码,主题涵盖各行各业,关注作者联系获取更多源码; 更多优质网页博文、网页模板移步查阅我的CSDN主页:angella.blog.csdn.net。

    PVG800S-800mm皮带检测报告(TABG-ZXJ 2021-069).pdf

    PVG800S-800mm皮带检测报告(TABG-ZXJ 2021-069).pdf

    node-v6.14.1-linux-x64.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    HTML+CSS+JS精品网页模板H56.rar

    HTML+CSS+JS精品网页模板,设置导航条、轮翻效果,鼠标滑动效果,自动弹窗,点击事件、链接等功能;适用于大学生期末大作业或公司网页的设计制作。响应式网页,可以根据不同的设备屏幕大小自动调整页面布局; 支持如Dreamweaver、HBuilder、Text 、Vscode 等任意html编辑软件进行编辑修改; 支持包括IE、Firefox、Chrome、Safari主流浏览器浏览; 下载文件解压缩,用Dreamweaver、HBuilder、Text 、Vscode 等任意html编辑软件打开,只需更改源代码中的文字和图片可直接使用。图片的命名和格式需要与原图片的名字和格式一致,其他的无需更改。如碰到HTML5+CSS+JS等专业技术问题,以及需要对应行业的模板等相关源码、模板、资料、教程等,随时联系博主咨询。 网页设计和制作、大学生网页课程设计、期末大作业、毕业设计、网页模板,网页成品源代码等,5000+套Web案例源码,主题涵盖各行各业,关注作者联系获取更多源码; 更多优质网页博文、网页模板移步查阅我的CSDN主页:angella.blog.csdn.net。

    优秀项目 基于STM32F103单片机的无线测距系统源码+详细文档+全部数据资料.zip

    【资源说明】 优秀项目 基于STM32F103单片机的无线测距系统源码+详细文档+全部数据资料.zip 【备注】 1、该项目是个人高分项目源码,已获导师指导认可通过,答辩评审分达到95分 2、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 3、本项目适合计算机相关专业(如软件工程、计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载使用,也可作为毕业设计、课程设计、作业、项目初期立项演示等,当然也适合小白学习进阶。 4、如果基础还行,可以在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!

    工作总结PPT15.pptx

    工作总结PPT15.pptx

    TortoiseGit安装包和中文语言包(Windows 64-bit)

    TortoiseGit安装包和中文语言包

    氢能行业深度报告之三:质子交换膜PEM市场空间广阔,国产替代进行时.pdf

    氢能行业深度报告之三:质子交换膜PEM市场空间广阔,国产替代进行时

    node-v0.10.45.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    高分项目 基于STM32单片机+openCV的云台色彩追踪系统源代码+项目资料齐全+教程文档.zip

    【资源概览】 高分项目 基于STM32单片机+openCV的云台色彩追踪系统源代码+项目资料齐全+教程文档.zip高分项目 基于STM32单片机+openCV的云台色彩追踪系统源代码+项目资料齐全+教程文档.zip高分项目 基于STM32单片机+openCV的云台色彩追踪系统源代码+项目资料齐全+教程文档.zip 【资源说明】 高分项目源码:此资源是在校高分项目的完整源代码,经过导师的悉心指导与认可,答辩评审得分高达95分,项目的质量与深度有保障。 测试运行成功:所有的项目代码在上传前都经过了严格的测试,确保在功能上完全符合预期,您可以放心下载并使用。 适用人群广泛:该项目不仅适合计算机相关专业(如电子信息、物联网、通信工程、自动化等)的在校学生和老师,还可以作为毕业设计、课程设计、作业或项目初期立项的演示材料。对于希望进阶学习的小白来说,同样是一个极佳的学习资源。 代码灵活性高:如果您具备一定的编程基础,可以在此代码基础上进行个性化的修改,以实现更多功能。当然,直接用于毕业设计、课程设计或作业也是完全可行的。 欢迎下载,与我一起交流学习,共同进步!

    NB-T51004-2012井巷揭煤地质说明书编制规范.pdf

    NB-T51004-2012井巷揭煤地质说明书编制规范.pdf

    工作总结PPT12.pptx

    工作总结PPT12.pptx

    MT T 898-2000 煤炭电法勘探规范.pdf

    MT T 898-2000 煤炭电法勘探规范.pdf

    基于 Python 实现的决策树预测波士顿房价

    决策树 基于 Python 实现的决策树预测波士顿房价

    C# 使用PrintDocument类打印标签

    本文介绍打印机初步配置,以及实现方法。标签主要展示基本信息以及二维码。首先设置打印机纸张大小,纸张高宽度以实际标签为准,设置好后可打印测试页测试一下,以ZDesigner GX430t打印机为例。标签打印C#控制程序源代码,适合自己进行二次开发。软件可以自己编辑标签,可以自动条形码或二维码的位置。标签打印是现代物流和仓储管理中不可或缺的重要环节之一。在许多行业中,如物流、零售和制造业等,标签打印技术被广泛应用于追踪和管理货物、库存和资产。为了满足不同标签打印需求,许多开发者将目光投向了C#编程语言,并且通过自定义控制程序源代码的方式实现标签打印的二次开发。 C#是一种面向对象的高级编程语言,由微软公司开发并广泛应用于Windows系统和.NET框架。它具有强大的功能和灵活的语法结构,使得开发者能够轻松地处理各种复杂的任务。在标签打印的场景下,C#语言提供了丰富的库和工具,使得开发者能够方便地控制打印机、编辑标签布局和生成条形码或二维码等。

Global site tag (gtag.js) - Google Analytics