场景:
    基础知识查询
动机:
    纯粹基础知识积累,便于后续查询.在很多场合,负责人们都在谈论去IOE话题,
所以,难免使用场合会或多或少会减少,于是按照习惯的思路记录一下.
环境: 
    Oracle Database 11g; PL/SQL Developer
1.功能
    创建Packages和Packages bodies是为了更好管理存储过程
2.创建Packages和Packages bodies

--1.创建包(Packages)
CREATE OR REPLACE PACKAGE PKG_ZBZ_PORTAL IS
END PKG_ZBZ_PORTAL;
--2.创建包体(Packages bodies)
CREATE OR REPLACE PACKAGE BODY PKG_ZBZ_PORTAL IS		
END PKG_ZBZ_PORTAL;

3.在Packages添加存储过程声明和在Packages bodies添加实现
3.1在Packages中的代码

--包存储过程定义
PROCEDURE PRO_INSERT_INFO_ARGS(IN_DATE IN VARCHAR2 := NULL,
                           FLAG OUT NUMBER,
                           FAIL_INFO OUT VARCHAR2);

3.2在Packages bodies中代码

--包体存储过程实现
PROCEDURE PRO_INSERT_INFO_ARGS(IN_DATE IN VARCHAR2 := NULL,
                           FLAG OUT NUMBER,
                           FAIL_INFO OUT VARCHAR2) IS
BEGIN
  DECLARE
    V_DATE DATE := TRUNC(SYSDATE - 1);
  BEGIN
    FLAG := 1;
	FAIL_INFO :='';
    IF (IN_DATE IS NOT NULL) THEN
      V_DATE := TO_DATE(IN_DATE, 'YYYYMMDD');
    END IF;  
    INSERT INTO B_LOG_INFO
      SELECT SEQ_DEMO_ID.NEXTVAL,
             V_DATE,
             SYSDATE,
             '1',
             '执行成功',
             50,
             'DUAL'
        FROM DUAL;
    COMMIT;
  EXCEPTION
    WHEN OTHERS THEN
	  FLAG := 0;
	  FAIL_INFO := '此次执行: ' || IN_DATE || '输出结果: FLAG = ' || FLAG ||
	          '异常信息:  ' || SQLERRM;
      ROLLBACK;
  END;
END PRO_INSERT_INFO_ARGS;

3.3Packages完整代码

--完整包头:
CREATE OR REPLACE PACKAGE PKG_ZBZ_PORTAL IS
  PROCEDURE PRO_INSERT_INFO_ARGS(IN_DATE   IN VARCHAR2 := NULL,
                                 FLAG      OUT NUMBER,
                                 FAIL_INFO OUT VARCHAR2);
END PKG_ZBZ_PORTAL;

3.4Packages bodies完整代码

--完整包体
CREATE OR REPLACE PACKAGE BODY PKG_ZBZ_PORTAL IS
  PROCEDURE PRO_INSERT_INFO_ARGS(IN_DATE   IN VARCHAR2 := NULL,
                                 FLAG      OUT NUMBER,
                                 FAIL_INFO OUT VARCHAR2) IS
  BEGIN
    DECLARE
      V_DATE DATE := TRUNC(SYSDATE - 1);
    BEGIN
      FLAG      := 1;
      FAIL_INFO := '';
      IF (IN_DATE IS NOT NULL) THEN
        V_DATE := TO_DATE(IN_DATE, 'YYYYMMDD');
      END IF;
      INSERT INTO B_LOG_INFO
        SELECT SEQ_DEMO_ID.NEXTVAL,
               V_DATE,
               SYSDATE,
               '1',
               '执行成功',
               50,
               'DUAL'
          FROM DUAL;
      COMMIT;
    EXCEPTION
      WHEN OTHERS THEN
        FLAG      := 0;
        FAIL_INFO := '此次执行: ' || IN_DATE || ' 输出结果: FLAG = ' || FLAG ||
                     '异常信息:  ' || SQLERRM;
        ROLLBACK;
    END;
  END PRO_INSERT_INFO_ARGS;
END PKG_ZBZ_PORTAL;

4.创建前Packages和Packages bodies目录
 
5.创建后Packages和Packages bodies目录
 
6.选中测试
 
7.输入测试参数
 
8.运行成功结果
 
9.抛出异常结果
 
10.配置存储过程选择jobs目录配置

11.任务状况查看

12.配置job的sql

begin
  sys.dbms_scheduler.create_job(job_name            => 'TEST_DEMO.DEMO_TEST',
                                job_type            => 'PLSQL_BLOCK',
                                job_action          => 'Declare  FLAG Number(20);FAIL_INFO   Varchar2(2000) ;Begin PKG_ZBZ_PORTAL.PRO_INSERT_INFO_ARGS(To_Char(Sysdate - 1,''YYYYMMDD''),FLAG,FAIL_INFO);End;',
                                start_date          => to_date('25-08-2019 00:00:00', 'dd-mm-yyyy hh24:mi:ss'),
                                repeat_interval     => 'Freq=Minutely;Interval=1',
                                end_date            => to_date(null),
                                job_class           => 'DEFAULT_JOB_CLASS',
                                enabled             => true,
                                auto_drop           => false,
                                comments            => '');
end;


以上,感谢.

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐