PKG_SERVICE
PKG_SERVICE支持的所有接口请参见表1。
表 1 PKG_SERVICE
PKG_SERVICE.SQL_IS_CONTEXT_ACTIVE
该函数用来确认一个CONTEXT是否已注册。该函数传入想查找的CONTEXT ID,如果该CONTEXT存在返回TRUE,反之返回FALSE。
PKG_SERVICE.SQL_IS_CONTEXT_ACTIVE函数原型为:
PKG_SERVICE.SQL_IS_CONTEXT_ACTIVE( context_id IN INTEGER ) RETURN BOOLEAN;
表 2 PKG_SERVICE.SQL_IS_CONTEXT_ACTIVE接口说明
PKG_SERVICE.SQL_CLEAN_ALL_CONTEXTS
该函数用来取消所有CONTEXT
PKG_SERVICE.SQL_CLEAN_ALL_CONTEXTS函数原型为:
PKG_SERVICE.SQL_CLEAN_ALL_CONTEXTS( ) RETURN VOID;
PKG_SERVICE.SQL_REGISTER_CONTEXT
该函数用来打开一个CONTEXT,是后续对该CONTEXT进行各项操作的前提。该函数不传入任何参数,内部自动递增生成CONTEXT ID,并作为返回值返回给integer定义的变量。
PKG_SERVICE.SQL_REGISTER_CONTEXT函数原型为:
DBE_SQL.REGISTER_CONTEXT( ) RETURN INTEGER;
PKG_SERVICE.SQL_UNREGISTER_CONTEXT
该函数用来关闭一个CONTEXT,是该CONTEXT中各项操作的结束。如果在存储过程结束时没有调用该函数,则该CONTEXT占用的内存仍然会保存,因此关闭CONTEXT非常重要。由于异常情况的发生会中途退出存储过程,导致CONTEXT未能关闭,因此建议存储过程中有异常处理,将该接口包含在内。
PKG_SERVICE.SQL_UNREGISTER_CONTEXT函数原型为:
PKG_SERVICE.SQL_UNREGISTER_CONTEXT( context_id IN INTEGER ) RETURN INTEGER;
表 3 PKG_SERVICE.SQL_UNREGISTER_CONTEXT接口说明
PKG_SERVICE.SQL_SET_SQL
该函数用来解析给定游标的查询语句,被传入的查询语句会立即执行。目前仅支持SELECT查询语句的解析,且语句参数仅可通过text类型传递,长度不大于1G。
PKG_SERVICE.SQL_SET_SQL函数的原型为:
PKG_SERVICE.SQL_SET_SQL( context_id IN INTEGER, query_string IN TEXT, language_flag IN INTEGER ) RETURN BOOLEAN;
表 4 PKG_SERVICE.SQL_SET_SQL接口说明
PKG_SERVICE.SQL_RUN
该函数用来执行一个给定的CONTEXT。该函数接收一个CONTEXT ID,运行后获得的数据用于后续操作。目前仅支持SELECT查询语句的执行。
PKG_SERVICE.SQL_RUN函数的原型为:
PKG_SERVICE.SQL_RUN( context_id IN INTEGER, ) RETURN INTEGER;
表 5 PKG_SERVICE.SQL_RUN接口说明
PKG_SERVICE.SQL_NEXT_ROW
该函数返回符合查询条件的数据行数,每一次运行该接口都会获取到新的行数的集合,直到数据读取完毕获取不到新行为止。
PKG_SERVICE.SQL_NEXT_ROW函数的原型为:
PKG_SERVICE.SQL_NEXT_ROW( context_id IN INTEGER, ) RETURN INTEGER;
表 6 PKG_SERVICE.SQL_NEXT_ROW接口说明
PKG_SERVICE.SQL_GET_VALUE
该函数用来返回给定CONTEXT中给定位置的CONTEXT元素值,该接口访问的是PKG_SERVICE.SQL_NEXT_ROW获取的数据。
PKG_SERVICE.SQL_GET_VALUE函数的原型为:
PKG_SERVICE.SQL_GET_VALUE( context_id IN INTEGER, pos IN INTEGER, col_type IN ANYELEMENT ) RETURN ANYELEMENT;
表 7 PKG_SERVICE.SQL_GET_VALUE接口说明
PKG_SERVICE.SQL_SET_RESULT_TYPE
该函数用来定义从给定CONTEXT返回的列,该接口只能应用于SELECT定义的CONTEXT中。定义的列通过查询列表的相对位置来标识,PKG_SERVICE.SQL_SET_RESULT_TYPE函数的原型为:
PKG_SERVICE.SQL_SET_RESULT_TYPE( context_id IN INTEGER, pos IN INTEGER, coltype_oid IN ANYELEMENT, maxsize IN INTEGER ) RETURN INTEGER;
表 8 PKG_SERVICE.SQL_SET_RESULT_TYPE接口说明
PKG_SERVICE.JOB_CANCEL
存储过程CANCEL删除指定的定时任务。
PKG_SERVICE.JOB_CANCEL函数原型为:
PKG_SERVICE.JOB_CANCEL( job IN INTEGER);
表 9 PKG_SERVICE.JOB_CANCEL接口参数说明
示例:
CALL PKG_SERVICE.JOB_CANCEL(101);
PKG_SERVICE.JOB_FINISH
存储过程FINISH禁用或者启用定时任务。
PKG_SERVICE.JOB_FINISH函数原型为:
PKG_SERVICE.JOB_FINISH( id IN INTEGER, finished IN BOOLEAN, next_time IN TIMESTAMP DEFAULT sysdate);
表 10 PKG_SERVICE.JOB_FINISH接口参数说明
PKG_SERVICE.JOB_SUBMIT
存储过程JOB_SUBMIT提交一个系统提供的定时任务。
PKG_SERVICE.JOB_SUBMIT函数原型为:
PKG_SERVICE.JOB_SUBMIT( id IN BIGINT DEFAULT, content IN TEXT, next_date IN TIMESTAMP DEFAULT sysdate, interval_time IN TEXT DEFAULT 'null', job OUT INTEGER);
说明: 当创建一个定时任务(JOB)时,系统默认将当前数据库和用户名与当前创建的定时任务绑定起来。该接口函数可以通过call或select调用,如果通过select调用,可以不填写出参。如果在存储过程中,则需要通过perform调用该接口函数。如果提交的sql语句任务使用到非public的schema,应该指定表或者函数的schema,或者在sql语句前添加set current_schema = xxx;语句。
注意: 在创建定时任务时,默认的sysdate为创建该定时任务所对应的客户端时间,而非服务器时间。例如服务器有默认参数timezone='US/Eastern',当我们在客户端中修改了timezone=PRC后,创建定时任务的sysdate的时间就变成了PRC时区下对应的时间。
表 11 PKG_SERVICE.JOB_SUBMIT接口参数说明
用来计算下次作业运行时间的时间表达式,可以是interval表达式,也可以是sysdate加上一个numeric值(例如:sysdate+1.0/24)。如果为空值或字符串"null"表示只执行一次,执行后JOB状态STATUS变成'd' 不再执行。
示例:
SELECT PKG_SERVICE.JOB_SUBMIT(NULL,'callpro_xxx();',to_date('20180101', 'yyyymmdd'),'sysdate()'); SELECT PKG_SERVICE.JOB_SUBMIT(NULL,'callpro_xxx();',to_date('20180101', 'yyyymmdd'),'sysdate() ,0/24'); CALL PKG_SERVICE.JOB_SUBMIT(NULL, 'INSERT INTO T_JOB VALUES(1); call pro_1(); call pro_2();', add_months(to_date('201701','yyyymm'),1), 'date_trunc(''day'',SYSDATE) + 1 +(8*60+30.0)/(24*60)' ,:jobid); SELECT PKG_SERVICE.JOB_SUBMIT (101, 'insert_msg_statistic1;', sysdate, 'sysdate+3.0/24');
PKG_SERVICE.JOB_UPDATE
存储过程UPDATE修改定时任务的属性,包括任务内容、下次执行时间、执行间隔。
PKG_SERVICE.JOB_UPDATE函数原型为:
PKG_SERVICE.JOB_UPDATE( id IN BIGINT, next_time IN TIMESTAMP, interval_time IN TEXT, content IN TEXT);
表 12 PKG_SERVICE.JOB_UPDATE接口参数说明
示例:
CALL PKG_SERVICE.JOB_UPDATE(101, 'call userproc();', sysdate, 'sysdate + 1.0/1440'); CALL PKG_SERVICE.JOB_UPDATE(101, 'insert into tbl_a values(sysdate);', sysdate, 'sysdate + 1.0/1440');
PKG_SERVICE.SUBMIT_ON_NODES
存储过程SUBMIT_ON_NODES创建一个结点上的定时任务,仅sysadmin/monitor admin有此权限。
PKG_SERVICE.SUBMIT_ON_NODES函数原型为:
PKG_SERVICE.SUBMIT_ON_NODES( node_name IN TEXT, database IN TEXT what IN TEXT, next_date IN TIMESTAMP DEFAULT sysdate, job_interval IN TEXT DEFAULT 'null', job OUT INTEGER);
表 13 PKG_SERVICE.SUBMIT_ON_NODES接口参数说明
指定作业的执行节点,当前仅支持值为'ALL_NODE'(在所有节点执行)与'CCN'(注:CCN在集中式/小型化环境下无意义)。
用来计算下次作业运行时间的时间表达式,可以是interval表达式,也可以是sysdate加上一个numeric值(例如:sysdate+1.0/24)。如果为空值或字符串"null"表示只执行一次,执行后JOB状态STATUS变成'd'不再执行。
示例:
select pkg_service.submit_on_nodes('ALL_NODE', 'postgres', 'select capture_view_to_json(''dbe_perf.statement'', 0);', sysdate, 'interval ''60 second'''); select pkg_service.submit_on_nodes('CCN', 'postgres', 'select capture_view_to_json(''dbe_perf.statement'', 0);', sysdate, 'interval ''60 second''');
PKG_SERVICE.ISUBMIT_ON_NODES
ISUBMIT_ON_NODES与SUBMIT_ON_NODES语法功能相同,但其第一个参数是入参,即指定的作业号,SUBMIT最后一个参数是出参,表示系统自动生成的作业号。仅sysadmin/monitor admin有此权限。
PKG_SERVICE.SQL_GET_ARRAY_RESULT
该函数用来返回绑定的数组类型的OUT参数的值,可以用来获取存储过程中的OUT参数。
PKG_SERVICE.SQL_GET_ARRAY_RESULT函数原型为:
PKG_SERVICE.SQL_GET_ARRAY_RESULT( context_id in int, pos in VARCHAR2, column_value inout anyarray, result_type in anyelement );
表 14 PKG_SERVICE.SQL_GET_ARRAY_RESULT接口说明
PKG_SERVICE.SQL_GET_VARIABLE_RESULT
该函数用来返回绑定的非数组类型的OUT参数的值,可以用来获取存储过程中的OUT参数。
PKG_SERVICE.SQL_GET_VARIABLE_RESULT函数原型为:
PKG_SERVICE.SQL_GET_VARIABLE_RESULT( context_id in int, pos in VARCHAR2, result_type in anyelement ) RETURNS anyelement;
表 15 PKG_SERVICE.SQL_GET_VARIABLE_RESULT接口说明