DBE_SQL
接口介绍
高级功能包DBE_SQL支持的接口请参见表1 DBE_SQL。
接口名称 |
描述 |
---|---|
打开一个游标。 |
|
关闭一个已打开的游标。 |
|
向游标传递一组SQL语句,目前只支持SELECT。 |
|
在游标上执行一组动态定义操作。 |
|
读取游标一行数据。 |
|
动态定义一个列。 |
|
动态定义一个char类型的列。 |
|
动态定义一个int类型的列。 |
|
动态定义一个long类型的列。 |
|
动态定义一个raw类型的列。 |
|
动态定义一个text类型的列。 |
|
动态定义一个未知列(类型不识别时入此接口)。 |
|
读取一个已动态定义的列值。 |
|
读取一个已动态定义的列值(指定char类型)。 |
|
读取一个已动态定义的列值(指定int类型)。 |
|
读取一个已动态定义的列值(指定long类型)。 |
|
读取一个已动态定义的列值(指定raw类型)。 |
|
读取一个已动态定义的列值(指定text类型)。 |
|
读取一个已动态定义的列值(类型不识别时入此接口)。 |
|
读取一个已动态定义的列值(指定char类型)。 |
|
读取一个已动态定义的列值(指定long类型)。 |
|
读取一个已动态定义的列值(指定raw类型)。 |
|
检查游标是否已打开。 |
|
DBE_SQL.LAST_ROW_COUNT |
兼容接口,暂不支持该功能。 |
DBE_SQL.RUN_AND_NEXT |
预留接口,暂不支持该功能。 |

- 建议使用dbe_sql.set_result_type及dbe_sql.get_result定义参数列。
- 当结果集大于work_mem设定值时会触发结果集临时下盘,但最大阈值不超过512MB。
- DBE_SQL.REGISTER_CONTEXT
该函数用来打开一个游标,是后续dbe_sql各项操作的前提。该函数不传入任何参数,内部自动递增生成游标ID,并作为返回值返回给integer定义的变量。
DBE_SQL.REGISTER_CONTEXT函数原型为:
1 2 3
DBE_SQL.REGISTER_CONTEXT( ) RETURN INTEGER;
- DBE_SQL.SQL_UNREGISTER_CONTEXT
该函数用来关闭一个游标,是dbe_sql各项操作的结束。如果在存储过程结束时没有调用该函数,则该游标占用的内存仍然会保存,因此关闭游标非常重要。由于异常情况的发生会中途退出存储过程,导致游标未能关闭,因此建议存储过程中有异常处理,将该接口包含在内。
DBE_SQL.SQL_UNREGISTER_CONTEXT函数原型为:
1 2 3 4
DBE_SQL.SQL_UNREGISTER_CONTEXT( context_id IN INTEGER ) RETURN INTEGER;
表2 DBE_SQL.SQL_UNREGISTER_CONTEXT接口说明 参数名称
描述
context_id
打算关闭的游标ID号
- DBE_SQL.SQL_SET_SQL
该函数用来解析给定游标的查询语句,被传入的查询语句会立即执行。目前仅支持SELECT查询语句的解析,且语句参数仅可通过text类型传递,长度不大于1G。
DBE_SQL.SQL_SET_SQL函数的原型为:1 2 3 4 5 6
DBE_SQL.SQL_SET_SQL( context_id IN INTEGER, query_string IN TEXT, language_flag IN INTEGER ) RETURN BOOLEAN;
表3 DBE_SQL.SQL_SET_SQL接口说明 参数名称
描述
context_id
执行查询语句解析的游标ID
query_string
执行的查询语句
language_flag
版本语言号,目前只支持1
- DBE_SQL.SQL_RUN
该函数用来执行一个给定的游标。该函数接收一个游标ID,运行后获得的数据用于后续操作。目前仅支持SELECT查询语句的执行。
DBE_SQL.SQL_RUN函数的原型为:1 2 3 4
DBE_SQL.SQL_RUN( context_id IN INTEGER, ) RETURN INTEGER;
表4 DBE_SQL.SQL_RUN接口说明 参数名称
描述
context_id
执行查询语句解析的游标ID
- DBE_SQL.NEXT_ROW
该函数返回符合查询条件的数据行数,每一次运行该接口都会获取到新的行数的集合,直到数据读取完毕获取不到新行为止。
DBE_SQL.NEXT_ROW函数的原型为:1 2 3 4
DBE_SQL.NEXT_ROW( context_id IN INTEGER, ) RETURN INTEGER;
表5 DBE_SQL.NEXT_ROW接口说明 参数名称
描述
context_id
执行的游标ID
- DBE_SQL.SET_RESULT_TYPE
该函数用来定义从给定游标返回的列,该接口只能应用于SELECT定义的游标中。定义的列通过查询列表的相对位置来标识,传入变量的数据类型决定了该列被定义的类型。
DBE_SQL.SET_RESULT_TYPE函数的原型为:1 2 3 4 5 6 7
DBE_SQL.SET_RESULT_TYPE( context_id IN INTEGER, pos IN INTEGER, column_ref IN ANYELEMENT, maxsize IN INTEGER default 1024 ) RETURN INTEGER;
表6 DBE_SQL.SET_RESULT_TYPE接口说明 参数名称
描述
context_id
执行的游标ID
pos
动态定义列在查询中的位置
column_ref
任意类型的变量,可根据变量类型选择适当的接口动态定义列
maxsize
定义的列的长度
- DBE_SQL.SET_RESULT_TYPE_CHAR
该函数用来定义从给定游标返回的CHAR类型的列,该接口只能应用于SELECT定义的游标中。定义的列通过查询列表的相对位置来标识,传入变量的数据类型决定了该列被定义的类型。
DBE_SQL.SET_RESULT_TYPE_CHAR函数的原型为:1 2 3 4 5 6 7
DBE_SQL.SET_RESULT_TYPE_CHAR( context_id IN INTEGER, pos IN INTEGER, column_ref IN TEXT, column_size IN INTEGER ) RETURN INTEGER;
表7 DBE_SQL.SET_RESULT_TYPE_CHAR接口说明 参数名称
描述
context_id
执行的游标ID
pos
动态定义列在查询中的位置
column_ref
需要定义的某类型的参数变量
column_size
动态定义列长度
- DBE_SQL.SET_RESULT_TYPE_INT
该函数用来定义从给定游标返回的INT类型的列,该接口只能应用于SELECT定义的游标中。定义的列通过查询列表的相对位置来标识,传入变量的数据类型决定了该列被定义的类型。
DBE_SQL.SET_RESULT_TYPE_INT函数的原型为:1 2 3 4 5
DBE_SQL.SET_RESULT_TYPE_INT( context_id IN INTEGER, pos IN INTEGER ) RETURN INTEGER;
表8 DBE_SQL.SET_RESULT_TYPE_INT接口说明 参数名称
描述
context_id
执行的游标ID
pos
动态定义列在查询中的位置
- DBE_SQL.SET_RESULT_TYPE_LONG
该函数用来定义从给定游标返回的长列类型(非数据类型long)的列,该接口只能应用于SELECT定义的游标中。定义的列通过查询列表的相对位置来标识,传入变量的数据类型决定了该列被定义的类型。长列的大小限制为1G。
DBE_SQL.SET_RESULT_TYPE_LONG函数的原型为:1 2 3 4 5
DBE_SQL.SET_RESULT_TYPE_LONG( context_id IN INTEGER, pos IN INTEGER ) RETURN INTEGER;
表9 DBE_SQL.SET_RESULT_TYPE_LONG接口说明 参数名称
描述
context_id
执行的游标ID
pos
动态定义列在查询中的位置
- DBE_SQL.SET_RESULT_TYPE_RAW
该函数用来定义从给定游标返回的RAW类型的列,该接口只能应用于SELECT定义的游标中。定义的列通过查询列表的相对位置来标识,传入变量的数据类型决定了该列被定义的类型。
DBE_SQL.SET_RESULT_TYPE_RAW函数的原型为:1 2 3 4 5 6 7
DBE_SQL.SET_RESULT_TYPE_RAW( context_id IN INTEGER, pos IN INTEGER, column_ref IN BYTEA, column_size IN INTEGER ) RETURN INTEGER;
表10 DBE_SQL.SET_RESULT_TYPE_RAW接口说明 参数名称
描述
context_id
执行的游标ID
pos
动态定义列在查询中的位置
column_ref
RAW类型的参数变量
column_size
列的长度
- DBE_SQL.SET_RESULT_TYPE_TEXT
该函数用来定义从给定游标返回的TEXT类型的列,该接口只能应用于SELECT定义的游标中。定义的列通过查询列表的相对位置来标识,传入变量的数据类型决定了该列被定义的类型。
DBE_SQL.SET_RESULT_TYPE_TEXT函数的原型为:1 2 3 4 5 6
DBE_SQL.DEFINE_COLUMN_CHAR( context_id IN INTEGER, pos IN INTEGER, maxsize IN INTEGER ) RETURN INTEGER;
表11 DBE_SQL.SET_RESULT_TYPE_TEXT接口说明 参数名称
描述
context_id
执行的游标ID
pos
动态定义列在查询中的位置
maxsize
定义的TEXT类型的最大长度
- DBE_SQL.SET_RESULT_TYPE_UNKNOWN
该函数用来处理从给定游标返回的未知数据类型的列,该接口仅用于类型不识别时的报错退出。
DBE_SQL.SET_RESULT_TYPE_UNKNOWN函数的原型为:1 2 3 4 5 6
DBE_SQL.SET_RESULT_TYPE_UNKNOWN( context_id IN INTEGER, pos IN INTEGER, col_type IN TEXT ) RETURN INTEGER;
表12 DBE_SQL.SET_RESULT_TYPE_UNKNOWN接口说明 参数名称
描述
context_id
执行的游标ID
posn
动态定义列在查询中的位置
col_type
动态定义的参数
- DBE_SQL.GET_RESULT
该函数用来返回给定游标给定位置的游标元素值,该接口访问的是DBE_SQL.NEXT_ROW获取的数据。
DBE_SQL.GET_RESULT函数的原型为:1 2 3 4 5 6
DBE_SQL.GET_RESULT( context_id IN INTEGER, pos IN INTEGER, column_value INOUT ANYELEMENT ) RETURN ANYELEMENT;
表13 DBE_SQL.GET_RESULT接口说明 参数名称
描述
context_id
执行的游标ID
pos
动态定义列在查询中的位置
column_value
定义的列的返回值
- DBE_SQL.GET_RESULT_CHAR
该函数用来返回给定游标给定位置的游标CHAR类型的值,该接口访问的是DBE_SQL.NEXT_ROW获取的数据。
DBE_SQL.GET_RESULT_CHAR函数的原型为:1 2 3 4 5 6 7 8
DBE_SQL.GET_RESULT_CHAR( context_id IN INTEGER, pos IN INTEGER, tr INOUT CHARACTER, err INOUT NUMERIC default 0, actual_length INOUT INTEGER default 1024 ) RETURN RECORD;
表14 DBE_SQL.GET_RESULT_CHAR接口说明 参数名称
描述
context_id
执行的游标ID
pos
动态定义列在查询中的位置
tr
返回值
err
错误号。传出参数,须传入变量做参数。目前未实现,固定传出-1。
actual_length
返回值的实际长度
- DBE_SQL.GET_RESULT_INT该函数用来返回给定游标给定位置的游标INT类型的值,该接口访问的是DBE_SQL.NEXT_ROW获取的数据。DBE_SQL.GET_RESULT_INT函数的原型为:
1 2 3 4 5
DBE_SQL.GET_RESULT_INT( context_id IN INTEGER, pos IN INTEGER ) RETURN INTEGER;
表15 DBE_SQL.GET_RESULT_INT接口说明 参数名称
描述
context_id
执行的游标ID
pos
动态定义列在查询中的位置
- DBE_SQL.GET_RESULT_LONG
该函数用来返回给定游标给定位置的游标长列(非long/bigint整型)类型的值,该接口访问的是DBE_SQL.NEXT_ROW获取的数据。
DBE_SQL.GET_RESULT_LONG函数的原型为:1 2 3 4 5 6 7 8 9
DBE_SQL.GET_RESULT_LONG( context_id IN INTEGER, pos IN INTEGER, lgth IN INTEGER, off_set IN INTEGER, vl INOUT TEXT, vl_length INOUT INTEGER default 1024 ) RETURN RECORD;
表16 DBE_SQL.GET_RESULT_LONG接口说明 参数名称
描述
context_id
执行的游标ID
pos
动态定义列在查询中的位置
lgth
返回值的长度
off_set
返回值的起始位置
vl
返回值
vl_length
实际返回值的长度
- DBE_SQL.GET_RESULT_RAW
该函数用来返回给定游标给定位置的游标RAW类型的值,该接口访问的是DBE_SQL.NEXT_ROW获取的数据。
DBE_SQL.GET_RESULT_RAW函数的原型为:1 2 3 4 5 6 7 8
DBE_SQL.GET_RESULT_RAW( context_id IN INTEGER, pos IN INTEGER, tr INOUT BYTEA, err INOUT NUMERIC default 0, actual_length INOUT INTEGER default 1024 ) RETURN RECORD;
表17 DBE_SQL.GET_RESULT_RAW接口说明 参数名称
描述
context_id
执行的游标ID
pos
动态定义列在查询中的位置
tr
返回的列值
err
错误号。传出参数,须传入变量做参数。目前未实现,固定传出-1。
actual_length
返回值的实际长度,不能长于此值,否则截断。
- DBE_SQL.GET_RESULT_TEXT
该函数用来返回给定游标给定位置的游标TEXT类型的值,该接口访问的是DBE_SQL.NEXT_ROW获取的数据。
DBE_SQL.GET_RESULT_TEXT函数的原型为:1 2 3 4 5
DBE_SQL.GET_RESULT_TEXT( context_id IN INTEGER, pos IN INTEGER ) RETURN TEXT;
表18 DBE_SQL.GET_RESULT_TEXT接口说明 参数名称
描述
context_id
执行的游标ID
pos
动态定义列在查询中的位置
- DBE_SQL.GET_RESULT_UNKNOWN
该函数用来返回给定游标给定位置的游标未知类型的值,该接口为类型不支持时的报错处理接口。
DBE_SQL.GET_RESULT_UNKNOWN函数的原型为:1 2 3 4 5 6
DBE_SQL.GET_RESULT_UNKNOWN( context_id IN INTEGER, pos IN INTEGER, result_type IN TEXT ) RETURN TEXT;
表19 DBE_SQL.GET_RESULT_UNKNOWN接口说明 参数名称
描述
context_id
执行的游标ID
pos
动态定义列在查询中的位置
result_type
返回的参数类型
- DBE_SQL.DBE_SQL_GET_RESULT_CHAR
该函数用来返回给定游标给定位置的游标CHAR类型的值,该接口访问的是DBE_SQL.NEXT_ROW获取的数据。和DBE_SQL.GET_RESULT_CHAR的区别是,不设置返回值长度,返回整个字符串。
DBE_SQL.DBE_SQL_GET_RESULT_CHAR函数的原型为:1 2 3 4 5
DBE_SQL.DBE_SQL_GET_RESULT_CHAR( context_id IN INTEGER, pos IN INTEGER ) RETURN CHARACTER;
表20 DBE_SQL.GET_RESULT_CHAR接口说明 参数名称
描述
context_id
执行的游标ID
pos
动态定义列在查询中的位置
- DBE_SQL.DBE_SQL_GET_RESULT_LONG
该函数用来返回给定游标给定位置的游标长列(非long/bigint整型)类型的值,该接口访问的是DBE_SQL.NEXT_ROW获取的数据。
和DBE_SQL.GET_RESULT_LONG的区别是,不设置返回值长度,返回整个BIGINT值。
DBE_SQL.DBE_SQL_GET_RESULT_LONG函数的原型为:1 2 3 4 5
DBE_SQL.DBE_SQL_GET_RESULT_LONG( context_id IN INTEGER, pos IN INTEGER ) RETURN BIGINT;
表21 DBE_SQL.DBE_SQL_GET_RESULT_LONG接口说明 参数名称
描述
context_id
执行的游标ID
pos
动态定义列在查询中的位置
- DBE_SQL.DBE_SQL_GET_RESULT_RAW
该函数用来返回给定游标给定位置的游标RAW类型的值,该接口访问的是DBE_SQL.NEXT_ROW获取的数据。
和函数DBE_SQL.GET_RESULT_RAW的区别是,不设置返回值长度,返回整个字符串。
DBE_SQL.DBE_SQL_GET_RESULT_RAW函数的原型为:1 2 3 4 5 6
DBE_SQL.GET_RESULT_RAW( context_id IN INTEGER, pos IN INTEGER, tr INOUT BYTEA ) RETURN BYTEA;
表22 DBE_SQL.GET_RESULT_RAW接口说明 参数名称
描述
context_id
执行的游标ID
pos
动态定义列在查询中的位置
- DBE_SQL.IS_ACTIVE
该函数用来返回游标的当前状态:打开、解析、执行、定义。取值是为TRUE,关闭后为FALSE,未知时报错,其余默认为关闭。
1 2 3 4 | DBE_SQL.IS_ACTIVE(
context_id IN INTEGER
)
RETURN BOOLEAN;
|
参数名称 |
描述 |
---|---|
context_id |
被查询的游标ID |
示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | --在存储过程中操作raw数据
postgres=# create or replace procedure pro_dbe_sql_all_02(in_raw raw,v_in int,v_offset int)
as
context_id int;
v_id int;
v_info bytea :=1;
query varchar(2000);
execute_ret int;
define_column_ret_raw bytea :='1';
define_column_ret int;
begin
drop table if exists pro_dbe_sql_all_tb1_02 ;
create table pro_dbe_sql_all_tb1_02(a int ,b blob);
insert into pro_dbe_sql_all_tb1_02 values(1,HEXTORAW('DEADBEEE'));
insert into pro_dbe_sql_all_tb1_02 values(2,in_raw);
query := 'select * from pro_dbe_sql_all_tb1_02 order by 1';
--打开游标
context_id := dbe_sql.register_context();
--编译游标
dbe_sql.sql_set_sql(context_id, query, 1);
--定义列
define_column_ret:= dbe_sql.set_result_type(context_id,1,v_id);
define_column_ret_raw:= dbe_sql.set_result_type_raw(context_id,2,v_info,10);
--执行
execute_ret := dbe_sql.sql_run(context_id);
loop
exit when (dbe_sql.next_row(cursorid) <= 0);
--获取值
dbe_sql.get_result(context_id,1,v_id);
dbe_sql.get_result_raw(context_id,2,v_info,v_in,v_offset);
--输出结果
dbe_output.print_line('id:'|| v_id || ' info:' || v_info);
end loop;
--关闭游标
dbe_sql.sql_unregister_context(context_id);
end;
/
--调用存储过程
postgres=# call pro_dbe_sql_all_02(HEXTORAW('DEADBEEF'),0,1);
--删除存储过程
postgres=# DROP PROCEDURE pro_dbe_sql_all_02;
|
