PKG_SERVICE
PKG_SERVICE支持的接口请参见表1。
| 接口名称 | 描述 |
|---|---|
| 确认该CONTEXT是否已注册。 | |
| 取消所有注册的CONTEXT。 | |
| 注册一个CONTEXT。 | |
| 取消注册该CONTEXT。 | |
| 向CONTEXT设置一条SQL语句,目前只支持SELECT。 | |
| 在一个CONTEXT上执行设置的SQL语句。 | |
| 读取该CONTEXT中的下一行数据。 | |
| 读取该CONTEXT中动态定义的列值。 | |
| 根据类型OID动态定义该CONTEXT的一个列。 | |
| 通过任务id来删除定时任务。 | |
| 禁用或者启用定时任务。 | |
| 提交一个定时任务。作业号由系统自动生成或由用户指定。 | |
| 修改定时任务的属性,包括任务内容、下次执行时间、执行间隔。 | |
| 提交一个任务到所有节点,作业号由系统自动生成。 | |
| 提交一个任务到所有节点,作业号由用户指定。 | |
| 获取该CONTEXT中返回的数组值。 | |
| 获取该CONTEXT中返回的列值。 |
使用EXECUTE DIRECT ON语法执行PKG_SERVICE包中的函数时,如果GUC参数enable_udf_execute_direct的值为on,则可以执行;如果其值为off,则不可以执行。
- 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接口参数说明 参数名称
描述
context_id
待查找的CONTEXT id号。
- PKG_SERVICE.SQL_CLEAN_ALL_CONTEXTS
PKG_SERVICE.SQL_CLEAN_ALL_CONTEXTS原型为:
PKG_SERVICE.SQL_CLEAN_ALL_CONTEXTS( ) RETURN VOID;
- PKG_SERVICE.SQL_REGISTER_CONTEXT
该函数用于打开一个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非常重要。由于异常情况可能导致存储过程中途退出,从而导致CONTEXT未能关闭,建议存储过程中有异常处理,将该接口包含在内。
PKG_SERVICE.SQL_UNREGISTER_CONTEXT原型为:
PKG_SERVICE.SQL_UNREGISTER_CONTEXT( context_id IN INTEGER ) RETURN INTEGER;
表3 PKG_SERVICE.SQL_UNREGISTER_CONTEXT接口参数说明 参数名称
描述
context_id
计划关闭的CONTEXT id号。
- 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接口参数说明 参数名称
描述
context_id
执行查询语句解析的CONTEXT id。
query_string
执行的查询语句。
language_flag
版本语言号,指定不同版本的行为。
- 1为非兼容版本。
- 2为ORA兼容模式版本。
- 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接口参数说明 参数名称
描述
context_id
执行查询语句解析的CONTEXT id。
- PKG_SERVICE.SQL_NEXT_ROW
该函数返回执行SQL实际返回的数据行数,每一次调用该接口都会读取下一行数据,直到数据读取完毕获取不到新行为止。
PKG_SERVICE.SQL_NEXT_ROW原型为:PKG_SERVICE.SQL_NEXT_ROW( context_id IN INTEGER, ) RETURN INTEGER;
表6 PKG_SERVICE.SQL_NEXT_ROW接口参数说明 参数名称
描述
context_id
执行的CONTEXT id。
- 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接口参数说明 参数名称
描述
context_id
执行的CONTEXT id。
pos
动态定义列在查询中的位置。
col_type
任意类型变量,定义列的返回值类型。
- 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接口参数说明 参数名称
描述
context_id
执行的CONTEXT id。
pos
动态定义列在查询中的位置。
coltype_oid
任意类型的变量,可根据变量类型得到对应类型OID。
maxsize
定义的列的长度。
- PKG_SERVICE.JOB_CANCEL
PKG_SERVICE.JOB_CANCEL原型为:
PKG_SERVICE.JOB_CANCEL( id IN INTEGER);
表9 PKG_SERVICE.JOB_CANCEL接口参数说明 参数
类型
入参/出参
是否可以为空
描述
id
INTEGER
IN
否
将要删除的定时任务的id。
- PKG_SERVICE.JOB_FINISH
PKG_SERVICE.JOB_FINISH原型为:
PKG_SERVICE.JOB_FINISH( id IN INTEGER, broken IN BOOLEAN, next_time IN TIMESTAMP DEFAULT sysdate);
表10 PKG_SERVICE.JOB_FINISH接口参数说明 参数
类型
入参/出参
是否可以为空
描述
id
INTEGER
IN
否
将要禁用或启用的定时任务的id。
broken
BOOLEAN
IN
否
状态标志位,true代表禁用,false代表启用。根据true或false值更新当前JOB的状态;如果为空值,则不改变原有JOB的状态。
next_time
TIMESTAMP
IN
是
下次运行时间,默认为当前系统时间。该参数可以省略,为默认值。
- 如果参数broken状态为true,则更新该参数为'4000-1-1'。
- 如果参数broken状态为false,参数next_time不为空值时,更新指定JOB的next_time值;next_time为空值时,不更新next_time值。
- PKG_SERVICE.JOB_SUBMIT PKG_SERVICE.JOB_SUBMIT原型为:
PKG_SERVICE.JOB_SUBMIT( id IN BIGINT, content IN TEXT, next_time 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;语句。
表11 PKG_SERVICE.JOB_SUBMIT接口参数说明 参数
类型
入参/出参
是否可以为空
描述
id
BIGINT
IN
否
定时任务id。如果传入id为NULL,则内部会生成作业id。
content
TEXT
IN
否
要执行的SQL语句。支持一个或多个DML、匿名块、调用存储过程的语句或三种类型混合的场景。
next_time
TIMESTAMP
IN
否
下次作业运行时间。默认值为当前系统时间(sysdate)。如果是过去时间,在提交作业时表示立即执行。
interval_time
TEXT
IN
是
用来计算下次作业运行时间的时间表达式,可以是interval表达式,也可以是sysdate加上一个NUMERIC值(例如:sysdate+1.0/24)。如果为空值或字符串"null",表示只执行一次,执行后,JOB状态STATUS变成'd' ,表示不再执行。
job
INTEGER
OUT
否
作业号。范围为1~3000000。当使用SELECT语句调用pkg_service.job_submit时,该参数可以省略。
- PKG_SERVICE.JOB_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接口参数说明 参数
类型
入参/出参
是否可以为空
描述
id
INTEGER
IN
否
指定的定时任务id。
next_time
TIMESTAMP
IN
是
下次运行时间。如果该参数为空值,则不更新指定JOB的next_time值,否则更新指定JOB的next_time值。
interval_time
TEXT
IN
是
用来计算下次作业运行时间的时间表达式。
- 如果该参数为空值,不更新指定job的interval_time值。
- 如果该参数不为空值,会校验interval_time是否为有效的时间类型或interval类型,若是则更新指定JOB的interval_time值。
- 如果为字符串"null",表示只执行一次,执行后,JOB状态STATUS变成'd' ,表示不再执行。
content
TEXT
IN
是
执行的存储过程名或者SQL语句块。如果该参数为空值,则不更新指定JOB的content值,否则更新指定JOB的content值。
示例:
CREATE TABLE test_table(a int); CREATE TABLE CREATE OR REPLACE PROCEDURE test_job(a in int) IS BEGIN INSERT INTO test_table VALUES(a); COMMIT; END; / CREATE PROCEDURE --PKG_SERVICE.JOB_SUBMIT SELECT PKG_SERVICE.JOB_SUBMIT(NULL, 'call test_job(1);', to_date('20180101','yyyymmdd'),'sysdate+1'); job_submit ------------ 28269 (1 row) SELECT PKG_SERVICE.JOB_SUBMIT(NULL, 'call test_job(1);', to_date('20180101','yyyymmdd'),'sysdate+1.0/24'); job_submit ------------ 1506 (1 row) CALL PKG_SERVICE.JOB_SUBMIT(NULL, 'INSERT INTO test_table VALUES(1); call test_job(1); call test_job(1);', add_months(to_date('201701','yyyymm'),1), 'date_trunc(''day'',SYSDATE) + 1 +(8*60+30.0)/(24*60)' ,:jobid); job ------- 14131 (1 row) SELECT PKG_SERVICE.JOB_SUBMIT (101, 'insert_msg_statistic1;', sysdate, 'sysdate+3.0/24'); job_submit ------------ 101 (1 row) --PKG_SERVICE.JOB_UPDATE CALL PKG_SERVICE.JOB_UPDATE(101, sysdate, 'sysdate + 1.0/1440', 'call test_job(1);'); job_update ------------ (1 row) CALL PKG_SERVICE.JOB_UPDATE(101, sysdate, 'sysdate + 1.0/1440', 'insert into test_table values(1);'); job_update ------------ (1 row) --PKG_SERVICE.JOB_FINISH CALL PKG_SERVICE.JOB_FINISH(101,true); job_finish ------------ (1 row) --PKG_SERVICE.JOB_CANCEL CALL PKG_SERVICE.JOB_CANCEL(101); job_cancel ------------ (1 row) DROP TABLE test_table; DROP TABLE - PKG_SERVICE.SUBMIT_ON_NODES
该函数用于创建一个所有CN/DN上的定时任务。仅sysadmin/monitor admin有权限调用该函数。
PKG_SERVICE.SUBMIT_ON_NODES原型为:
PKG_SERVICE.SUBMIT_ON_NODES( node_name IN NAME, database IN NAME, what IN TEXT, next_date IN TIMESTAMP WITHOUT TIME ZONE, job_interval IN TEXT, job OUT INTEGER);
表13 PKG_SERVICE.SUBMIT_ON_NODES接口参数说明 参数
类型
入参/出参
是否可以为空
描述
node_name
TEXT
IN
否
指定作业的执行节点,当前仅支持值为'ALL_NODE'(在所有节点执行)与'CCN'(在central coordinator执行)。
database
TEXT
IN
否
集群作业所使用的database,节点类型为'ALL_NODE'时仅支持值为'postgres'。
what
TEXT
IN
否
要执行的SQL语句。支持一个或多个DML、匿名块、调用存储过程的语句或三种类型混合的场景。
nextdate
TIMESTAMP
IN
否
下次作业运行时间。默认值为当前系统时间(sysdate)。如果是过去时间,在提交作业时表示立即执行。
job_interval
TEXT
IN
否
用来计算下次作业运行时间的时间表达式,可以是interval表达式,也可以是sysdate加上一个NUMERIC值(例如:sysdate+1.0/24)。如果为空值或字符串"null",表示只执行一次,执行后,JOB状态STATUS变成'd',表示不再执行。
job
INTEGER
OUT
否
作业号。范围为1~3000000。当使用SELECT调用DBMS.SUBMIT_ON_NODES时,该参数可以省略。
示例:
SELECT pkg_service.submit_on_nodes('ALL_NODE', 'postgres', 'select capture_view_to_json(''dbe_perf.statement'', 0);', sysdate, 'interval ''60 second'''); submit_on_nodes ----------------- 12068 (1 row) SELECT pkg_service.submit_on_nodes('CCN', 'postgres', 'select capture_view_to_json(''dbe_perf.statement'', 0);', sysdate, 'interval ''60 second'''); submit_on_nodes ----------------- 9027 (1 row) - 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接口参数说明 参数名称
描述
context_id
待查找的CONTEXT id号。
pos
绑定的参数名。
column_value
返回值。
result_type
返回值类型。
- 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接口参数说明 参数名称
描述
context_id
待查找的CONTEXT id号。
pos
绑定的参数名。
result_type
返回值类型。