GaussDB-DBE_SQL
数据类型介绍
-
DBE_SQL.DESC_REC
该类型是复合类型,用来存储SQL_DESCRIBE_COLUMNS接口中的描述信息。
DBE_SQL.DESC_REC类型的原型为:
| ``` CREATE TYPE DBE_SQL.DESC_REC AS ( col_type int, col_max_len int, col_name VARCHAR2(32), col_name_len int, col_schema_name VARCHAR2(32), col_schema_name_len int, col_precision int, col_scale int, col_charsetid int, col_charsetform int, col_null_ok BOOLEAN );
| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -
DBE_SQL.DESC_TAB
-
DBE_SQL.DATE_TABLE
-
DBE_SQL.NUMBER_TABLE
-
DBE_SQL.VARCHAR2_TABLE
接口介绍
高级功能包DBE_SQL支持的接口请参见表1。
- 建议使用dbe_sql.set_result_type及dbe_sql.get_result定义参数列。
- 当结果集大于work_mem设定值时会触发结果集临时下盘,但最大阈值不超过512MB。
-
DBE_SQL.REGISTER_CONTEXT
该函数用来打开一个游标,是后续dbe_sql各项操作的前提。该函数不传入任何参数,内部自动递增生成游标ID,并作为返回值返回给integer定义的变量。
DBE_SQL打开的游标是会话级的变量,不支持跨会话调用打开的游标(如自治事务),如果调用跨会话的游标,那么行为不可预知。
DBE_SQL.REGISTER_CONTEXT函数原型为:
| ``` DBE_SQL.REGISTER_CONTEXT( ) RETURN INTEGER;
| ---------------------------------------------------- | -
DBE_SQL.SQL_UNREGISTER_CONTEXT
该函数用来关闭一个游标,是dbe_sql各项操作的结束。如果在存储过程结束时没有调用该函数,则该游标占用的内存仍然会保存,因此关闭游标非常重要。由于异常情况的发生会中途退出存储过程,导致游标未能关闭,因此建议如果存储过程中有异常处理,应将该接口包含在内。
DBE_SQL.SQL_UNREGISTER_CONTEXT函数原型为:
| ``` DBE_SQL.SQL_UNREGISTER_CONTEXT( context_id IN INT ) RETURN INTEGER;
| ------------------------------------------------------------------------------------ | | 参数名称 | 类型 | 入参/出参 | 是否可以为空 | 描述 | | :--------- | :-- | :---- | :----- | :---------- | | context_id | INT | IN | 否 | 打算关闭的游标ID号。 |
-
DBE_SQL.SQL_SET_SQL
该函数用来解析给定游标的SQL语句或匿名块。目前语句参数仅可通过text类型传递,长度不大于1GB。
DBE_SQL.SQL_SET_SQL函数的原型为:
| ``` DBE_SQL.SQL_SET_SQL( context_id IN INT, query_string IN TEXT, language_flag IN INT ) RETURN BOOLEAN;
| ----------------------------------------------------------------------------------------------------------------------------- | | 参数名称 | 类型 | 入参/出参 | 是否可以为空 | 描述 | | :------------ | :--- | :---- | :----- | :-------------------------------------- | | context_id | INT | IN | 否 | 执行查询语句解析的游标ID。 | | query_string | TEXT | IN | 否 | 执行的查询语句。 | | language_flag | INT | IN | 否 | 版本语言号,指定SQL语句不同版本的行为,1为非兼容版本,2为兼容ORA版本。 | -
DBE_SQL.SQL_RUN
该函数用来执行一个给定的游标。该函数接收一个游标ID,执行游标中的SQL语句或匿名块。
DBE_SQL.SQL_RUN函数的原型为:
| ``` DBE_SQL.SQL_RUN( context_id IN INT, ) RETURN INTEGER;
| --------------------------------------------------------------------- | | 参数名称 | 类型 | 入参/出参 | 是否可以为空 | 描述 | | :--------- | :-- | :---- | :----- | :------------- | | context_id | INT | IN | 否 | 执行查询语句解析的游标ID。 | -
DBE_SQL.NEXT_ROW
该函数返回符合查询条件的数据行数,每一次运行该接口都会获取到新的行数的集合,直到数据读取完毕获取不到新行为止。
DBE_SQL.NEXT_ROW函数的原型为:
| ``` DBE_SQL.NEXT_ROW( context_id IN INT, ) RETURN INTEGER;
| ---------------------------------------------------------------------- | | 参数名称 | 类型 | 入参/出参 | 是否可以为空 | 描述 | | :--------- | :-- | :---- | :----- | :------- | | context_id | INT | IN | 否 | 执行的游标ID。 | -
DBE_SQL.SET_RESULT_TYPE
该函数用来定义从给定游标返回的列,该接口只能应用于SELECT定义的游标中。定义的列通过查询列表的相对位置来标识,传入变量的数据类型决定了该列被定义的类型。
DBE_SQL.SET_RESULT_TYPE函数的原型为:
| ``` DBE_SQL.SET_RESULT_TYPE( context_id IN INT, pos IN INT, column_ref IN ANYELEMENT, maxsize IN INT default 1024 ) RETURN INTEGER;
| ------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | 参数名称 | 类型 | 入参/出参 | 是否可以为空 | 描述 | | :--------- | :--------- | :---- | :----- | :--------------------------- | | context_id | INT | IN | 否 | 执行的游标ID。 | | pos | INT | IN | 否 | 查询列在返回结果中的相对位置,起始为1。 | | column_ref | ANYELEMENT | IN | 否 | 任意类型的变量,可根据变量类型选择适当的接口动态定义列。 | | maxsize | INT | IN | 是 | 定义列返回类型长度。 | -
DBE_SQL.SET_RESULT_TYPE_CHAR
该函数用来定义从给定游标返回的CHAR类型的列,该接口只能应用于SELECT定义的游标中。定义的列通过查询列表的相对位置来标识,传入变量的数据类型决定了该列被定义的类型。
DBE_SQL.SET_RESULT_TYPE_CHAR函数的原型为:
| ``` DBE_SQL.SET_RESULT_TYPE_CHAR( context_id IN INT, pos IN INT, column_ref IN TEXT, column_size IN INT ) RETURN INTEGER;
| -------------------------------------------------------------------------------------------------------------------------------------------------------- | | 参数名称 | 类型 | 入参/出参 | 是否可以为空 | 描述 | | :---------- | :--- | :---- | :----- | :------------- | | context_id | INT | IN | 否 | 执行的游标ID。 | | pos | INT | IN | 否 | 动态定义列在查询中的位置。 | | column_ref | TEXT | IN | 否 | 需要定义的某类型的参数变量。 | | column_size | INT | IN | 否 | 动态定义列长度。 | -
DBE_SQL.SET_RESULT_TYPE_INT
该函数用来定义从给定游标返回的INT类型的列,该接口只能应用于SELECT定义的游标中。定义的列通过查询列表的相对位置来标识,传入变量的数据类型决定了该列被定义的类型。
DBE_SQL.SET_RESULT_TYPE_INT函数的原型为:
| ``` DBE_SQL.SET_RESULT_TYPE_INT( context_id IN INT, pos IN INT ) RETURN INTEGER;
| ---------------------------------------------------------------------------------------------------- | | 参数名称 | 类型 | 入参/出参 | 是否可以为空 | 描述 | | :--------- | :-- | :---- | :----- | :------------ | | context_id | INT | IN | 否 | 执行的游标ID。 | | pos | INT | IN | 否 | 动态定义列在查询中的位置。 | -
DBE_SQL.SET_RESULT_TYPE_LONG
该函数用来定义从给定游标返回的长列类型(非数据类型long)的列,该接口只能应用于SELECT定义的游标中。定义的列通过查询列表的相对位置来标识,传入变量的数据类型决定了该列被定义的类型。长列的大小限制为1G。
DBE_SQL.SET_RESULT_TYPE_LONG函数的原型为:
| ``` DBE_SQL.SET_RESULT_TYPE_LONG( context_id IN INT, pos IN INT ) RETURN INTEGER;
| ----------------------------------------------------------------------------------------------------- | | 参数名称 | 类型 | 入参/出参 | 是否可以为空 | 描述 | | :--------- | :-- | :---- | :----- | :------------ | | context_id | INT | IN | 否 | 执行的游标ID。 | | pos | INT | IN | 否 | 动态定义列在查询中的位置。 | -
DBE_SQL.SET_RESULT_TYPE_RAW
该函数用来定义从给定游标返回的RAW类型的列,该接口只能应用于SELECT定义的游标中。定义的列通过查询列表的相对位置来标识,传入变量的数据类型决定了该列被定义的类型。
DBE_SQL.SET_RESULT_TYPE_RAW函数的原型为:
| ``` DBE_SQL.SET_RESULT_TYPE_RAW( context_id IN INT, pos IN INT, column_ref IN BYTEA, column_size IN INT ) RETURN INTEGER;
| -------------------------------------------------------------------------------------------------------------------------------------------------------- | | 参数名称 | 类型 | 入参/出参 | 是否可以为空 | 描述 | | :---------- | :---- | :---- | :----- | :------------ | | context_id | INT | IN | 否 | 执行的游标ID。 | | pos | INT | IN | 否 | 动态定义列在查询中的位置。 | | column_ref | BYTEA | IN | 否 | RAW类型的参数变量。 | | column_size | INT | IN | 否 | 列的长度。 | -
DBE_SQL.SET_RESULT_TYPE_TEXT
该函数用来定义从给定游标返回的TEXT类型的列,该接口只能应用于SELECT定义的游标中。定义的列通过查询列表的相对位置来标识,传入变量的数据类型决定了该列被定义的类型。
DBE_SQL.SET_RESULT_TYPE_TEXT函数的原型为:
| ``` DBE_SQL.DEFINE_COLUMN_CHAR( context_id IN INT, pos IN INT, maxsize IN INT ) RETURN INTEGER;
| -------------------------------------------------------------------------------------------------------------------------- | | 参数名称 | 类型 | 入参/出参 | 是否可以为空 | 描述 | | :--------- | :- | :---- | :----- | :-------------- | | context_id | IN | IN | 否 | 执行的游标ID。 | | pos | IN | IN | 否 | 动态定义列在查询中的位置。 | | maxsize | IN | IN | 否 | 定义的TEXT类型的最大长度。 | -
DBE_SQL.SET_RESULT_TYPE_UNKNOWN
该函数用来处理从给定游标返回的未知数据类型的列,该接口仅用于类型不识别时的报错退出。
DBE_SQL.SET_RESULT_TYPE_UNKNOWN函数的原型为:
| ``` DBE_SQL.SET_RESULT_TYPE_UNKNOWN( context_id IN INT, pos IN INT, col_type IN TEXT ) RETURN INTEGER;
| -------------------------------------------------------------------------------------------------------------------------------- | | 参数名称 | 类型 | 入参/出参 | 是否可以为空 | 描述 | | :--------- | :--- | :---- | :----- | :------------ | | context_id | INT | IN | 否 | 执行的游标ID。 | | pos | INT | IN | 否 | 动态定义列在查询中的位置。 | | col_type | TEXT | IN | 否 | 动态定义的参数。 | -
DBE_SQL.GET_RESULT
该存储过程用来返回给定游标给定位置的游标元素值,该接口访问的是DBE_SQL.NEXT_ROW获取的数据。
DBE_SQL.GET_RESULT存储过程的原型为:
| ``` DBE_SQL.GET_RESULT( context_id IN INT, pos IN INT, column_value INOUT ANYELEMENT );
| ------------------------------------------------------------------------------------------------------------------- | | 参数名称 | 类型 | 入参/出参 | 是否可以为空 | 描述 | | :----------- | :--------- | :---- | :----- | :------------------- | | context_id | INT | IN | 否 | 执行的游标ID。 | | pos | INT | IN | 否 | 查询列在返回结果中的相对位置,起始为1。 | | column_value | ANYELEMENT | INOUT | 否 | 定义的列的返回值。 | -
DBE_SQL.GET_RESULT_CHAR
该存储过程用来返回给定游标给定位置的游标CHAR类型的值,该接口访问的是DBE_SQL.NEXT_ROW获取的数据。
DBE_SQL.GET_RESULT_CHAR存储过程的原型为:
| ``` DBE_SQL.GET_RESULT_CHAR( context_id IN INT, pos IN INT, tr INOUT CHAR, err INOUT NUMERIC DEFAULT 0, actual_length INOUT INT DEFAULT 1024 );
| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | 参数名称 | 类型 | 入参/出参 | 是否可以为空 | 描述 | | :------------ | :------ | :---- | :----- | :------------------------------------- | | context_id | INT | IN | 否 | 执行的游标ID。 | | pos | INT | IN | 否 | 动态定义列在查询中的位置。 | | tr | CHAR | INOUT | 否 | 返回值。 | | err | NUMERIC | INOUT | 是 | 错误号。传出参数,须传入变量做参数(默认值为0)。目前未实现,固定传出-1。 | | actual_length | INT | INOUT | 是 | 返回值的实际长度,默认值为1024。 | -
DBE_SQL.GET_RESULT_INT
该函数用来返回给定游标给定位置的游标INT类型的值,该接口访问的是DBE_SQL.NEXT_ROW获取的数据。DBE_SQL.GET_RESULT_INT函数的原型为:
| ``` DBE_SQL.GET_RESULT_INT( context_id IN INT, pos IN INT ) RETURN INTEGER;
| ----------------------------------------------------------------------------------------------------- | | 参数名称 | 类型 | 入参/出参 | 是否可以为空 | 描述 | | :--------- | :-- | :---- | :----- | :------------ | | context_id | INT | IN | 否 | 执行的游标ID。 | | pos | INT | IN | 否 | 动态定义列在查询中的位置。 | -
DBE_SQL.GET_RESULT_LONG
该存储过程用来返回给定游标给定位置的游标长列(非long/bigint整型)类型的值,该接口访问的是DBE_SQL.NEXT_ROW获取的数据。
DBE_SQL.GET_RESULT_LONG存储过程的原型为:
| ``` DBE_SQL.GET_RESULT_LONG( context_id IN INT, pos IN INT, lgth IN INT, off_set IN INT, vl INOUT TEXT, vl_length INOUT INT );
| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | 参数名称 | 类型 | 入参/出参 | 是否可以为空 | 描述 | | :--------- | :--- | :---- | :----- | :------------ | | context_id | INT | IN | 否 | 执行的游标ID。 | | pos | INT | IN | 否 | 动态定义列在查询中的位置。 | | lgth | INT | IN | 否 | 返回值的长度。 | | off_set | INT | IN | 否 | 返回值的起始位置。 | | vl | TEXT | INOUT | 否 | 返回值。 | | vl_length | INT | INOUT | 否 | 实际返回值的长度。 | -
DBE_SQL.GET_RESULT_RAW
该存储过程用来返回给定游标给定位置的游标RAW类型的值,该接口访问的是DBE_SQL.NEXT_ROW获取的数据。
DBE_SQL.GET_RESULT_RAW存储过程的原型为:
| ``` DBE_SQL.GET_RESULT_RAW( context_id IN INT, pos IN INT, tr INOUT BYTEA, err INOUT NUMERIC DEFAULT 0, actual_length INOUT INT DEFAULT 1024 );
| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | 参数名称 | 类型 | 入参/出参 | 是否可以为空 | 描述 | | :------------ | :------ | :---- | :----- | :------------------------------------- | | context_id | INT | IN | 否 | 执行的游标ID | | pos | INT | IN | 否 | 动态定义列在查询中的位置 | | tr | BYTEA | INOUT | 否 | 返回的列值 | | err | NUMERIC | INOUT | 否 | 错误号。传出参数,须传入变量做参数(默认值为0)。目前未实现,固定传出-1。 | | actual_length | INT | INOUT | 否 | 返回值的实际长度,不能长于此值,否则截断,默认值为1024。 | -
DBE_SQL.GET_RESULT_TEXT
该函数用来返回给定游标给定位置的游标TEXT类型的值,该接口访问的是DBE_SQL.NEXT_ROW获取的数据。
DBE_SQL.GET_RESULT_TEXT函数的原型为:
| ``` DBE_SQL.GET_RESULT_TEXT( context_id IN INT, pos IN INT ) RETURN TEXT;
| --------------------------------------------------------------------------------------------- | | 参数名称 | 类型 | 入参/出参 | 是否可以为空 | 描述 | | :--------- | :-- | :---- | :----- | :----------- | | context_id | INT | IN | 否 | 执行的游标ID | | pos | INT | IN | 否 | 动态定义列在查询中的位置 | -
DBE_SQL.GET_RESULT_UNKNOWN
该函数用来返回给定游标给定位置的游标未知类型的值,该接口为类型不支持时的报错处理接口。
DBE_SQL.GET_RESULT_UNKNOWN函数的原型为:
| ``` DBE_SQL.GET_RESULT_UNKNOWN( context_id IN INT, pos IN INT, col_type IN TEXT ) RETURN INTEGER;
| --------------------------------------------------------------------------------------------------------------------------- | | 参数名称 | 类型 | 入参/出参 | 是否可以为空 | 描述 | | :--------- | :--- | :---- | :----- | :------------ | | context_id | INT | IN | 否 | 执行的游标ID。 | | pos | INT | IN | 否 | 动态定义列在查询中的位置。 | | col_type | TEXT | IN | 否 | 返回的参数类型。 | -
DBE_SQL.DBE_SQL_GET_RESULT_CHAR
该函数用来返回给定游标给定位置的游标CHAR类型的值,该接口访问的是DBE_SQL.NEXT_ROW获取的数据。和DBE_SQL.GET_RESULT_CHAR的区别是,不设置返回值长度,返回整个字符串。
DBE_SQL.DBE_SQL_GET_RESULT_CHAR函数的原型为:
| ``` DBE_SQL.DBE_SQL_GET_RESULT_CHAR( context_id IN INT, pos IN INT ) RETURN CHARACTER;
| ---------------------------------------------------------------------------------------------------------------- | | 参数名称 | 类型 | 入参/出参 | 是否可以为空 | 描述 | | :--------- | :-- | :---- | :----- | :------------ | | context_id | INT | IN | 否 | 执行的游标ID。 | | pos | INT | IN | 否 | 动态定义列在查询中的位置。 | -
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函数的原型为:
| ``` DBE_SQL.DBE_SQL_GET_RESULT_LONG( context_id IN INT, pos IN INT ) RETURN BIGINT;
| ------------------------------------------------------------------------------------------------------------- | | 参数名称 | 类型 | 入参/出参 | 是否可以为空 | 描述 | | :--------- | :-- | :---- | :----- | :------------ | | context_id | INT | IN | 否 | 执行的游标ID。 | | pos | INT | IN | 否 | 动态定义列在查询中的位置。 | -
DBE_SQL.DBE_SQL_GET_RESULT_RAW
该函数用来返回给定游标给定位置的游标RAW类型的值,该接口访问的是DBE_SQL.NEXT_ROW获取的数据。
和函数DBE_SQL.GET_RESULT_RAW的区别是,不设置返回值长度,返回整个字符串。
DBE_SQL.DBE_SQL_GET_RESULT_RAW函数的原型为:
| ``` DBE_SQL.DBE_SQL_GET_RESULT_RAW( context_id IN INT, pos IN INT ) RETURN RAW;
| --------------------------------------------------------------------------------------------------------------- | | 参数名称 | 类型 | 入参/出参 | 是否可以为空 | 描述 | | :--------- | :-- | :---- | :----- | :------------ | | context_id | INT | IN | 否 | 执行的游标ID。 | | pos | INT | IN | 否 | 动态定义列在查询中的位置。 | -
DBE_SQL.IS_ACTIVE
该函数用来返回游标的当前状态:游标处于打开、解析、执行、定义时为TRUE,关闭后为FALSE,未知时报错,其余默认为关闭。
DBE_SQL.IS_ACTIVE函数的原型为:
| ``` DBE_SQL.IS_ACTIVE( context_id IN INT ) RETURN BOOLEAN;
| ------------------------------------------------------------------------- | | 参数名称 | 类型 | 入参/出参 | 是否可以为空 | 描述 | | :--------- | :-- | :---- | :----- | :-------- | | context_id | INT | IN | 否 | 被查询的游标ID。 |
-
该函数用来返回最近一次NEXT_ROW执行后,获取的数据行数的累积计数。
DBE_SQL.LAST_ROW_COUNT函数的原型为:
| ``` DBE_SQL.LAST_ROW_COUNT( ) RETURN INTEGER;
| -------------------------------------------------- | -
该函数的功能等同于在调用SQL_RUN后接着调用NEXT_ROW。
DBE_SQL.RUN_AND_NEXT函数的原型为:
| ``` DBE_SQL.RUN_AND_NEXT( context_id IN INT ) RETURNS INTEGER;
| ----------------------------------------------------------------------- | | 参数名称 | 类型 | 入参/出参 | 是否可以为空 | 描述 | | :--------- | :-- | :---- | :----- | :------------- | | context_id | INT | IN | 否 | 执行查询语句解析的游标ID。 | -
该函数用来绑定一个参数到SQL语句,当执行SQL语句时,会根据该绑定的值来执行。
DBE_SQL.SQL_BIND_VARIABLE函数的原型为:
| ``` DBE_SQL.SQL_BIND_VARIABLE( context_id IN int, query_string IN text, language_flag IN anyelement, out_value_size IN int default null ) RETURNS void;
| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | 参数名称 | 类型 | 入参/出参 | 是否可以为空 | 描述 | | :------------- | :--------- | :---- | :----- | :--------------- | | context_id | INT | IN | 否 | 被查询的游标ID。 | | query_string | TEXT | IN | 否 | 绑定的变量名。 | | language_flag | ANYELEMENT | IN | 否 | 绑定的值。 | | out_value_size | INT | IN | 是 | 返回值的大小,默认值为NULL。 | -
该函数用来绑定一组参数到SQL语句,当执行SQL语句时,会根据该绑定的数组来执行。
DBE_SQL.SQL_BIND_ARRAY函数的原型为:
| ``` DBE_SQL.SQL_BIND_ARRAY( context_id IN int, query_string IN text, value IN anyarray ) RETURNS void; DBE_SQL.SQL_BIND_ARRAY( context_id IN int, query_string IN text, value IN anyarray, lower_index IN int, higher_index IN int ) RETURNS void;
| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | 参数名称 | 类型 | 入参/出参 | 是否可以为空 | 描述 | | :----------- | :------- | :---- | :----- | :--------- | | context_id | INT | IN | 否 | 被查询的游标ID。 | | query_string | TEXT | IN | 否 | 绑定的变量名。 | | value | ANYARRAY | IN | 否 | 绑定的数组。 | | lower_index | INT | IN | 否 | 绑定数组的最小下标。 | | higher_index | INT | IN | 否 | 绑定数组的最大下标。 | -
该函数用来定义从给定游标返回的INT数组类型的列,该接口只能应用于SELECT定义的游标中。定义的列通过查询列表的相对位置来标识,传入变量的数据类型决定了该列被定义的类型。
DBE_SQL.SET_RESULT_TYPE_INTS函数的原型为:
| ``` DBE_SQL.SET_RESULT_TYPE_INTS( context_id IN int, pos IN int, column_ref IN anyarray, cnt IN int, lower_bnd IN int ) RETURNS integer;
| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | 参数名称 | 类型 | 入参/出参 | 是否可以为空 | 描述 | | :--------- | :------- | :---- | :----- | :------------ | | context_id | INT | IN | 否 | 被查询的游标ID。 | | pos | INT | IN | 否 | 动态定义列在查询中的位置。 | | column_ref | ANYARRAY | IN | 否 | 标记返回的数组类型。 | | cnt | INT | IN | 否 | 标记一次获取多少个值。 | | lower_bnd | INT | IN | 否 | 标记返回数组时的开始下标。 | -
该函数用来定义从给定游标返回的TEXT数组类型的列,该接口只能应用于SELECT定义的游标中。定义的列通过查询列表的相对位置来标识,传入变量的数据类型决定了该列被定义的类型。
DBE_SQL.SET_RESULT_TYPE_TEXTS函数的原型为:
| ``` DBE_SQL.SET_RESULT_TYPE_TEXTS( context_id IN int, pos IN int, column_ref IN anyarray, cnt IN int, lower_bnd IN int, maxsize IN int ) RETURNS VOID;
| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | 参数名称 | 类型 | 入参/出参 | 是否可以为空 | 描述 | | :--------- | :------- | :---- | :----- | :-------------- | | context_id | INT | IN | 否 | 被查询的游标ID。 | | pos | INT | IN | 否 | 动态定义列在查询中的位置。 | | column_ref | ANYARRAY | IN | 否 | 标记返回的数组类型。 | | cnt | INT | IN | 否 | 标记一次获取多少个值。 | | lower_bnd | INT | IN | 否 | 标记返回数组时的开始下标。 | | maxsize | INT | IN | 否 | 定义的TEXT类型的最大长度。 | -
该函数用来定义从给定游标返回的RAW数组类型的列,该接口只能应用于SELECT定义的游标中。定义的列通过查询列表的相对位置来标识,传入变量的数据类型决定了该列被定义的类型。
DBE_SQL.SET_RESULT_TYPE_RAWS函数的原型为:
| ``` DBE_SQL.set_result_type_raws( context_id IN int, pos IN int, column_ref IN anyarray, cnt IN int, lower_bnd IN int, column_size IN int ) RETURNS integer;
| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | 参数名称 | 类型 | 入参/出参 | 是否可以为空 | 描述 | | :---------- | :------- | :---- | :----- | :------------ | | context_id | INT | IN | 否 | 被查询的游标ID。 | | pos | INT | IN | 否 | 动态定义列在查询中的位置。 | | column_ref | ANYARRAY | IN | 否 | 标记返回的数组类型。 | | cnt | INT | IN | 否 | 标记一次获取多少个值。 | | lower_bnd | INT | IN | 否 | 标记返回数组时的开始下标。 | | column_size | INT | IN | 否 | 列的长度。 | -
DBE_SQL.SET_RESULT_TYPE_BYTEAS
该函数用来定义从给定游标返回的BYTEA数组类型的列,该接口只能应用于SELECT定义的游标中。定义的列通过查询列表的相对位置来标识,传入变量的数据类型决定了该列被定义的类型。
DBE_SQL.SET_RESULT_TYPE_BYTEAS函数的原型为:
| ``` DBE_SQL.set_result_type_byteas( context_id IN int, pos IN int, column_ref IN anyarray, cnt IN int, lower_bnd IN int, column_size IN int ) RETURNS integer;
| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | 参数名称 | 类型 | 入参/出参 | 是否可以为空 | 描述 | | :---------- | :------- | :---- | :----- | :------------ | | context_id | INT | IN | 否 | 被查询的游标ID。 | | pos | INT | IN | 否 | 动态定义列在查询中的位置。 | | column_ref | ANYARRAY | IN | 否 | 标记返回的数组类型。 | | cnt | INT | IN | 否 | 标记一次获取多少个值。 | | lower_bnd | INT | IN | 否 | 标记返回数组时的开始下标。 | | column_size | INT | IN | 否 | 列的长度。 | -
该函数用来定义从给定游标返回的CHAR数组类型的列,该接口只能应用于SELECT定义的游标中。定义的列通过查询列表的相对位置来标识,传入变量的数据类型决定了该列被定义的类型。
DBE_SQL.SET_RESULT_TYPE_CHARS函数的原型为:
| ``` DBE_SQL.SET_RESULT_TYPE_CHARS( context_id IN int, pos IN int, column_ref IN anyarray, cnt IN int, lower_bnd IN int, column_size IN int ) RETURNS integer;
| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | 参数名称 | 类型 | 入参/出参 | 是否可以为空 | 描述 | | :---------- | :------- | :---- | :----- | :------------ | | context_id | INT | IN | 否 | 被查询的游标ID。 | | pos | INT | IN | 否 | 动态定义列在查询中的位置。 | | column_ref | ANYARRAY | IN | 否 | 标记返回的数组类型。 | | cnt | INT | IN | 否 | 标记一次获取多少个值。 | | lower_bnd | INT | IN | 否 | 标记返回数组时的开始下标。 | | column_size | INT | IN | 否 | 列的长度。 | -
该函数用来定义从给定游标返回的列,该接口只能应用于SELECT定义的游标中。定义的列通过查询列表的相对位置来标识,传入变量的数据类型决定了该列被定义的类型。
DBE_SQL.SET_RESULTS_TYPE函数的原型为:
| ``` DBE_SQL.SET_RESULTS_TYPE( context_id IN int, pos IN int, column_ref IN anyarray, cnt IN int, lower_bnd IN int, maxsize IN int DEFAULT 1024 ) returns void;
| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | 参数名称 | 类型 | 入参/出参 | 是否可以为空 | 描述 | | :--------- | :------- | :---- | :----- | :------------ | | context_id | INT | IN | 否 | 被查询的游标ID。 | | pos | INT | IN | 否 | 动态定义列在查询中的位置。 | | column_ref | ANYARRAY | IN | 否 | 标记返回的数组类型。 | | cnt | INT | IN | 否 | 标记一次获取多少个值。 | | lower_bnd | INT | IN | 否 | 标记返回数组时的开始下标。 | | maxsize | INT | IN | 是 | 定义的类型的最大长度。 | -
该存储过程用来返回给定游标给定位置的游标INT数组类型的值,该接口访问的是DBE_SQL.NEXT_ROW获取的数据。
DBE_SQL.GET_RESULTS_INT存储过程的原型为:
| ``` DBE_SQL.GET_RESULTS_INT( context_id IN int, pos IN int, column_value INOUT anyarray );
| ------------------------------------------------------------------------------------------------------------------------------- | | 参数名称 | 类型 | 入参/出参 | 是否可以为空 | 描述 | | :----------- | :------- | :---- | :----- | :------------ | | context_id | INT | IN | 否 | 被查询的游标ID。 | | pos | INT | IN | 否 | 动态定义列在查询中的位置。 | | column_value | ANYARRAY | INOUT | 否 | 返回值。 | -
该存储过程用来返回给定游标给定位置的游标TEXT数组类型的值,该接口访问的是DBE_SQL.NEXT_ROW获取的数据。
DBE_SQL.GET_RESULTS_TEXT存储过程的原型为:
| ``` DBE_SQL.GET_RESULTS_TEXT( context_id IN int, pos IN int, column_value INOUT anyarray );
| ------------------------------------------------------------------------------------------------------------------------------- | | 参数名称 | 类型 | 入参/出参 | 是否可以为空 | 描述 | | :----------- | :------- | :---- | :----- | :------------ | | context_id | INT | IN | 否 | 被查询的游标ID。 | | pos | INT | IN | 否 | 动态定义列在查询中的位置。 | | column_value | ANYARRAY | INOUT | 否 | 返回值。 | -
该存储过程用来返回给定游标给定位置的游标RAW数组类型的值,该接口访问的是DBE_SQL.NEXT_ROW获取的数据。
DBE_SQL.GET_RESULTS_RAW存储过程的原型为:
| ``` DBE_SQL.GET_RESULTS_RAW( context_id IN int, pos IN int, column_value INOUT anyarray );
| ----------------------------------------------------------------------------------------------------------------------------- | | 参数名称 | 类型 | 入参/出参 | 是否可以为空 | 描述 | | :----------- | :------- | :---- | :----- | :------------ | | context_id | INT | IN | 否 | 被查询的游标ID。 | | pos | INT | IN | 否 | 动态定义列在查询中的位置。 | | column_value | ANYARRAY | INOUT | 否 | 返回值。 | -
该存储过程用来返回给定游标给定位置的游标BYTEA数组类型的值,该接口访问的是DBE_SQL.NEXT_ROW获取的数据。
DBE_SQL.GET_RESULTS_BYTEA存储过程的原型为:
| ``` DBE_SQL.GET_RESULTS_BYTEA( context_id IN int, pos IN int, column_value INOUT anyarray );
| ------------------------------------------------------------------------------------------------------------------------------- | | 参数名称 | 类型 | 入参/出参 | 是否可以为空 | 描述 | | :----------- | :------- | :---- | :----- | :------------ | | context_id | INT | IN | 否 | 被查询的游标ID。 | | pos | INT | IN | 否 | 动态定义列在查询中的位置。 | | column_value | ANYARRAY | INOUT | 否 | 返回值。 | -
该存储过程用来返回给定游标给定位置的游标CHAR数组类型的值,该接口访问的是DBE_SQL.NEXT_ROW获取的数据。
DBE_SQL.GET_RESULTS_CHAR存储过程的原型为:
| ``` DBE_SQL.GET_RESULTS_CHAR( context_id IN int, pos IN int, column_value INOUT anyarray );
| ------------------------------------------------------------------------------------------------------------------------------ | | 参数名称 | 类型 | 入参/出参 | 是否可以为空 | 描述 | | :----------- | :------- | :---- | :----- | :------------ | | context_id | INT | IN | 否 | 被查询的游标ID。 | | pos | INT | IN | 否 | 动态定义列在查询中的位置。 | | column_value | ANYARRAY | INOUT | 否 | 返回值。 | -
该存储过程用来返回给定游标给定位置的游标数组类型的值,该接口访问的是DBE_SQL.NEXT_ROW获取的数据。
由于DBE_SQL.GET_RESULTS底层机制通过数组实现,当用不同的数组获取同一列的返回值时,会由于内部索引的不连续向数组中填充NULL值来确保数组本身索引的连续性,这会导致返回结果数组的长度和Oracle的不一致。
DBE_SQL.GET_RESULTS存储过程的原型为:
| ``` DBE_SQL.GET_RESULTS( context_id IN int, pos IN int, column_value INOUT anyarray );
| ------------------------------------------------------------------------------------------------------------------------ | | 参数名称 | 类型 | 入参/出参 | 是否可以为空 | 描述 | | :----------- | :------- | :---- | :----- | :------------ | | context_id | INT | IN | 否 | 被查询的游标ID。 | | pos | INT | IN | 否 | 动态定义列在查询中的位置。 | | column_value | ANYARRAY | INOUT | 否 | 返回值。 | -
该函数用来描述列信息,该接口只能应用于SELECT定义的游标中。
DBE_SQL.SQL_DESCRIBE_COLUMNS函数的原型为:
| ``` DBE_SQL.SQL_DESCRIBE_COLUMNS( context_id IN int, col_cnt INOUT int, desc_t INOUT dbe_sql.desc_tab )RETURNS record;
| --------------------------------------------------------------------------------------------------------------------------------------------------- | | 参数名称 | 类型 | 入参/出参 | 是否可以为空 | 描述 | | :--------- | :--------------- | :---- | :----- | :--------- | | context_id | INT | IN | 否 | 被查询的游标ID。 | | col_cnt | INT | INOUT | 否 | 返回的列的数量。 | | desc_t | DBE_SQL.DESC_TAB | INOUT | 否 | 返回的列的描述信息。 | -
该存储过程用来描述列信息,该接口为兼容接口,只能应用于SELECT定义的游标中。
DBE_SQL.DESCRIBE_COLUMNS存储过程的原型为:
| ``` DBE_SQL.DESCRIBE_COLUMNS( context_id IN int, col_cnt OUT int, desc_t OUT dbe_sql.desc_tab )
| -------------------------------------------------------------------------------------------------------------------------- | | 参数名称 | 类型 | 入参/出参 | 是否可以为空 | 描述 | | :--------- | :--------------- | :---- | :----- | :--------- | | context_id | INT | IN | 否 | 被查询的游标ID。 | | col_cnt | INT | OUT | 否 | 返回的列的数量。 | | desc_t | DBE_SQL.DESC_TAB | OUT | 否 | 返回的列的描述信息。 | -
DBE_SQL.SQL_SET_RESULTS_TYPE_C
DBE_SQL.SQL_SET_RESULTS_TYPE_C函数的原型为:
| ``` DBE_SQL.sql_set_results_type_c( context_id IN int, pos IN int, column_ref IN anyarray, cnt IN int, lower_bnd IN int, col_type IN anyelement, maxsize IN int )return integer;
| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | 参数名称 | 类型 | 入参/出参 | 是否可以为空 | 描述 | | :--------- | :--------- | :---- | :----- | :---------------- | | context_id | INT | IN | 否 | 被查询的游标ID。 | | pos | INT | IN | 否 | 动态定义列在查询中的位置。 | | column_ref | ANYARRAY | IN | 否 | 标记返回的数组类型。 | | cnt | INT | IN | 否 | 标记一次获取多少个值。 | | lower_bnd | INT | IN | 否 | 标记返回数组时的开始下标。 | | col_type | ANYELEMENT | IN | 否 | 标记返回的数组类型对应的变量类型。 | | maxsize | INT | IN | 否 | 定义的类型的最大长度。 | -
DBE_SQL.SQL_GET_VALUES_C函数的原型为:
| ``` DBE_SQL.sql_get_values_c( context_id IN int, pos IN int, results_type INOUT anyarray, result_type IN anyelement )return anyarray;
| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | 参数名称 | 类型 | 入参/出参 | 是否可以为空 | 描述 | | :----------- | :--------- | :---- | :----- | :-------- | | context_id | INT | IN | 否 | 被查询的游标ID。 | | pos | INT | IN | 否 | 参数位置信息。 | | results_type | ANYARRAY | INOUT | 否 | 获取的结果。 | | result_type | ANYELEMENT | IN | 否 | 获取的结果类型。 | -
该存储过程用来返回绑定的OUT参数的值,可以用来获取存储过程中的OUT参数。
DBE_SQL.GET_VARIABLE_RESULT存储过程的原型为:
| ``` DBE_SQL.get_variable_result( context_id IN int, pos IN VARCHAR2, column_value INOUT anyelement );
| --------------------------------------------------------------------------------------------------------------------------------------- | | 参数名称 | 类型 | 入参/出参 | 是否可以为空 | 描述 | | :----------- | :--------- | :---- | :----- | :-------- | | context_id | INT | IN | 否 | 被查询的游标ID。 | | pos | VARCHAR2 | IN | 否 | 绑定的参数名。 | | column_value | ANYELEMENT | INOUT | 否 | 返回值。 | -
DBE_SQL.GET_VARIABLE_RESULT_CHAR
该函数用来返回绑定的CHAR类型的OUT参数的值,可以用来获取存储过程中的OUT参数。
DBE_SQL.GET_VARIABLE_RESULT_CHAR函数的原型为:
| ``` DBE_SQL.get_variable_result_char( context_id IN int, pos IN VARCHAR2 ) RETURNS char
| ----------------------------------------------------------------------------------------------------------- | | 参数名称 | 类型 | 入参/出参 | 是否可以为空 | 描述 | | :--------- | :------- | :---- | :----- | :-------- | | context_id | INT | IN | 否 | 被查询的游标ID。 | | pos | VARCHAR2 | IN | 否 | 绑定的参数名。 | -
DBE_SQL.GET_VARIABLE_RESULT_RAW
该存储过程用来返回绑定的RAW类型的OUT参数的值,可以用来获取存储过程中的OUT参数。
DBE_SQL.GET_VARIABLE_RESULT_RAW存储过程的原型为:
| ``` DBE_SQL.get_variable_result_raw( context_id IN int, pos IN VARCHAR2, value INOUT anyelement );
| ------------------------------------------------------------------------------------------------------------------------------------- | | 参数名称 | 类型 | 入参/出参 | 是否可以为空 | 描述 | | :--------- | :--------- | :---- | :----- | :-------- | | context_id | INT | IN | 否 | 被查询的游标ID。 | | pos | VARCHAR2 | IN | 否 | 绑定的参数名。 | | value | ANYELEMENT | INOUT | 否 | 返回值。 | -
DBE_SQL.GET_VARIABLE_RESULT_TEXT
该函数用来返回绑定的TEXT类型的OUT参数的值,可以用来获取存储过程中的OUT参数。
DBE_SQL.GET_VARIABLE_RESULT_TEXT函数的原型为:
| ``` CREATE OR REPLACE FUNCTION DBE_SQL.get_variable_result_text( context_id IN int, pos IN VARCHAR2 ) RETURNS text
| -------------------------------------------------------------------------------------------------------------------------------------- | | 参数名称 | 类型 | 入参/出参 | 是否可以为空 | 描述 | | :--------- | :------- | :---- | :----- | :-------- | | context_id | INT | IN | 否 | 被查询的游标ID。 | | pos | VARCHAR2 | IN | 否 | 绑定的参数名。 | -
DBE_SQL.GET_VARIABLE_RESULT_INT
该存储过程用来返回绑定的INT类型的OUT参数的值,可以用来获取存储过程中的OUT参数。
DBE_SQL.GET_VARIABLE_RESULT_INT存储过程的原型为:
| ``` DBE_SQL.get_variable_result_int( context_id IN int, pos IN VARCHAR2, value INOUT anyelement );
| ------------------------------------------------------------------------------------------------------------------------------------- | | 参数名称 | 类型 | 入参/出参 | 是否可以为空 | 描述 | | :--------- | :--------- | :---- | :----- | :-------- | | context_id | INT | IN | 否 | 被查询的游标ID。 | | pos | VARCHAR2 | IN | 否 | 绑定的参数名。 | | value | ANYELEMENT | INOUT | 否 | 返回值。 | -
该存储过程用来返回绑定的TEXT数组类型的OUT参数的值,可以用来获取存储过程中的OUT参数。
DBE_SQL.GET_ARRAY_RESULT_TEXT存储过程的原型为:
| ``` DBE_SQL.get_array_result_text( context_id IN int, pos IN VARCHAR2, column_value INOUT anyarray );
| --------------------------------------------------------------------------------------------------------------------------------------- | | 参数名称 | 类型 | 入参/出参 | 是否可以为空 | 描述 | | :----------- | :------- | :---- | :----- | :-------- | | context_id | INT | IN | 否 | 被查询的游标ID。 | | pos | VARCHAR2 | IN | 否 | 绑定的参数名。 | | column_value | ANYARRAY | INOUT | 否 | 返回值。 | -
该存储过程用来返回绑定的RAW数组类型的OUT参数的值,可以用来获取存储过程中的OUT参数。
DBE_SQL.GET_ARRAY_RESULT_RAW存储过程的原型为:
| ``` DBE_SQL.get_array_result_raw( context_id IN int, pos IN VARCHAR2, column_value INOUT anyarray );
| -------------------------------------------------------------------------------------------------------------------------------------- | | 参数名称 | 类型 | 入参/出参 | 是否可以为空 | 描述 | | :----------- | :------- | :---- | :----- | :-------- | | context_id | INT | IN | 否 | 被查询的游标ID。 | | pos | VARCHAR2 | IN | 否 | 绑定的参数名。 | | column_value | ANYARRAY | INOUT | 否 | 返回值。 | -
该存储过程用来返回绑定的CHAR数组类型的OUT参数的值,可以用来获取存储过程中的OUT参数。
DBE_SQL.GET_ARRAY_RESULT_CHAR存储过程的原型为:
| ``` DBE_SQL.get_array_result_char( context_id IN int, pos IN VARCHAR2, column_value INOUT anyarray );
| --------------------------------------------------------------------------------------------------------------------------------------- | | 参数名称 | 类型 | 入参/出参 | 是否可以为空 | 描述 | | :----------- | :------- | :---- | :----- | :-------- | | context_id | INT | IN | 否 | 被查询的游标ID。 | | pos | VARCHAR2 | IN | 否 | 绑定的参数名。 | | column_value | ANYARRAY | INOUT | 否 | 返回值。 | -
该存储过程用来返回绑定的INT数组类型的OUT参数的值,可以用来获取存储过程中的OUT参数。
DBE_SQL.GET_ARRAY_RESULT_INT存储过程的原型为:
| ``` DBE_SQL.get_array_result_int( context_id IN int, pos IN VARCHAR2, column_value INOUT anyarray );
| -------------------------------------------------------------------------------------------------------------------------------------- | | 参数名称 | 类型 | 入参/出参 | 是否可以为空 | 描述 | | :----------- | :------- | :---- | :----- | :-------- | | context_id | INT | IN | 否 | 被查询的游标ID。 | | pos | VARCHAR2 | IN | 否 | 绑定的参数名。 | | column_value | ANYARRAY | INOUT | 否 | 返回值。 |
示例
| ``` -- 示例1 -- 创建表并插入数据 CREATE TABLE test_desc_cols( id NUMBER, name VARCHAR2(50) ); INSERT INTO test_desc_cols(id, name) VALUES (1, 'xiaoming'); INSERT INTO test_desc_cols(id, name) VALUES (2, 'xiaohong'); INSERT INTO test_desc_cols(id, name) VALUES (3, 'xiaolan'); DECLARE context_id INTEGER; col_cnt INTEGER; v_id int; v_name varchar2; execute_ret INTEGER; BEGIN -- 打开游标 context_id := DBE_SQL.REGISTER_CONTEXT(); -- 编译游标 DBE_SQL.SQL_SET_SQL(context_id, 'SELECT * FROM test_desc_cols', 2); -- 设置列返回值的类型 DBE_SQL.SET_RESULT_TYPE(context_id, 1, v_id); DBE_SQL.SET_RESULT_TYPE(context_id, 2, v_name); execute_ret := DBE_SQL.SQL_RUN(context_id); loop exit when (DBE_SQL.NEXT_ROW(context_id) <= 0); --获取值 DBE_SQL.GET_RESULT(context_id, 1, v_id); DBE_SQL.GET_RESULT(context_id, 2, v_name); --输出结果 dbe_output.print_line('id:'|| v_id || ' name:' || v_name); end loop; DBE_SQL.SQL_UNREGISTER_CONTEXT(context_id); END; / -- 预期结果为: id:1 name:xiaoming id:2 name:xiaohong id:3 name:xiaolan ANONYMOUS BLOCK EXECUTE -- 清理环境 drop table if exists test_desc_cols; DROP TABLE -- 示例2 CREATE OR REPLACE PROCEDURE test_square(n NUMBER, square OUT NUMBER) IS BEGIN square := n * n; END; / CREATE PROCEDURE DECLARE cur NUMBER; query varchar(2000); ret integer; n NUMBER; square Integer; BEGIN n := 2; cur := DBE_SQL.REGISTER_CONTEXT(); query := 'BEGIN test_square(:n_bnd, :square_bnd); END;'; DBE_SQL.SQL_SET_SQL(cur, query, 2); DBE_SQL.SQL_BIND_VARIABLE(cur, 'n_bnd', n); DBE_SQL.SQL_BIND_VARIABLE(cur, 'square_bnd', square); ret := DBE_SQL.SQL_RUN(cur); DBE_SQL.GET_VARIABLE_RESULT(cur, 'square_bnd', square); DBE_OUTPUT.PRINT_LINE('square = ' || square); DBE_SQL.SQL_UNREGISTER_CONTEXT(cur); END; / -- 预期结果为: square = 4 ANONYMOUS BLOCK EXECUTE -- 清理环境 drop PROCEDURE test_square; DROP PROCEDURE -- 示例3 -- DESCRIBE_COLUMNS、RUN_AND_NEXT和LAST_ROW_COUNT接口示例 -- 创建表并插入数据 CREATE TABLE test_desc_cols( id NUMBER, name VARCHAR2(50) ); INSERT INTO test_desc_cols(id, name) VALUES (1, 'xiaoming'); INSERT INTO test_desc_cols(id, name) VALUES (2, 'xiaohong'); INSERT INTO test_desc_cols(id, name) VALUES (3, 'xiaolan'); -- 示例4 DROP TABLE if exists dbe_sql_tab; create table dbe_sql_tab(a char(30), b int, c text, d bytea, e text, f bool); insert into dbe_sql_tab values('aaa', 10, 'abcdefghijklmn', 'a', 'abcdefghijklmn', true); DECLARE cursorid int; execute_ret int; query varchar(2000); err numeric; v_char char(30); v_int int; v_long text; v_long_len int; v_bytea bytea; v_text text; BEGIN query := 'select * from dbe_sql_tab'; cursorid := DBE_SQL.register_context(); DBE_SQL.sql_set_sql(cursorid, query, 1); DBE_SQL.SET_RESULT_TYPE_CHAR(cursorid, 1, v_char, 30); DBE_SQL.SET_RESULT_TYPE_INT(cursorid, 2); DBE_SQL.SET_RESULT_TYPE_LONG(cursorid, 3); DBE_SQL.SET_RESULT_TYPE_RAW(cursorid, 4, v_bytea, 8); DBE_SQL.SET_RESULT_TYPE_TEXT(cursorid, 5, 1024); execute_ret := DBE_SQL.sql_run(cursorid); loop exit when (DBE_SQL.next_row(cursorid) <= 0); DBE_SQL.GET_RESULT_CHAR(cursorid, 1, v_char); v_int := DBE_SQL.GET_RESULT_INT(cursorid, 2); DBE_SQL.GET_RESULT_LONG(cursorid, 3, 3, 3, v_long, v_long_len); DBE_SQL.GET_RESULT_RAW(cursorid, 4, v_bytea); v_text := DBE_SQL.GET_RESULT_TEXT(cursorid, 5); dbe_output.print_line('a:'|| v_char); dbe_output.print_line('b:'|| v_int); dbe_output.print_line('c:'|| v_long); raise info 'd:%', v_bytea; dbe_output.print_line('e:'|| v_text); end loop; DBE_SQL.sql_unregister_context(cursorid); END; / -- 预期结果为: a:aaa b:10 c:cde INFO: d:\x61 e:abcdefghijklmn ANONYMOUS BLOCK EXECUTE DECLARE cursorid int; execute_ret int; query varchar(2000); BEGIN query := 'select * from dbe_sql_tab'; cursorid := DBE_SQL.register_context(); DBE_SQL.sql_set_sql(cursorid, query, 1); DBE_SQL.SET_RESULT_TYPE_UNKNOWN(cursorid, 7, 'boolean'); execute_ret := DBE_SQL.sql_run(cursorid); loop exit when (DBE_SQL.next_row(cursorid) <= 0); DBE_SQL.GET_RESULT_UNKNOWN(cursorid, 7, 'boolean'); end loop; DBE_SQL.sql_unregister_context(cursorid); END; / -- 预期结果为: ERROR: UnSupport data type for set_result_type(context: 8, pos: 7, 'boolean') CONTEXT: SQL statement "CALL pg_catalog.report_application_error('UnSupport data type for set_result_type(context: '||context_id||', pos: '||pos||', '||PG_CATALOG.QUOTE_LITERAL(col_type)||')')" PL/pgSQL function dbe_sql.set_result_type_unknown(integer,integer,text) line 8 at PERFORM SQL statement "CALL dbe_sql.set_result_type_unknown(cursorid,7,'boolean')" PL/pgSQL function inline_code_block line 10 at PERFORM -- 清理环境 drop table dbe_sql_tab; DROP TABLE -- 示例5 drop table if exists dbe_sql_tab; create table dbe_sql_tab(a char(30), b raw); insert into dbe_sql_tab values('aaa', HEXTORAW('DEADBEEF')); DECLARE cursorid int; execute_ret int; query varchar(2000); v_char char(30); v_raw bytea; BEGIN query := 'select * from dbe_sql_tab'; cursorid := DBE_SQL.register_context(); DBE_SQL.sql_set_sql(cursorid, query, 2); DBE_SQL.SET_RESULT_TYPE(cursorid, 1, v_char); DBE_SQL.SET_RESULT_TYPE_RAW(cursorid, 2, v_raw, 1024); execute_ret := DBE_SQL.sql_run(cursorid); loop exit when (DBE_SQL.next_row(cursorid) <= 0); v_char := DBE_SQL.DBE_SQL_GET_RESULT_CHAR(cursorid, 1); v_raw := DBE_SQL.DBE_SQL_GET_RESULT_RAW(cursorid, 2); dbe_output.print_line('a:'|| v_char); raise info 'b:%', v_raw; end loop; DBE_SQL.sql_unregister_context(cursorid); END; / -- 预期结果为: a:aaa INFO: b:\x4445414442454546 ANONYMOUS BLOCK EXECUTE -- 清理环境 drop table dbe_sql_tab; DROP TABLE -- 示例6 DECLARE cursorid int; execute_ret int; is_open boolean; BEGIN cursorid := DBE_SQL.register_context(); is_open := DBE_SQL.IS_ACTIVE(cursorid); dbe_output.print_line('is_open:' ||is_open); DBE_SQL.sql_unregister_context(cursorid); is_open := DBE_SQL.IS_ACTIVE(cursorid); dbe_output.print_line('is_open:' ||is_open); END; / -- 预期结果为: is_open:true is_open:false ANONYMOUS BLOCK EXECUTE -- 示例7 create table tbl(a integer ,b varchar(100)); DECLARE c integer; v1 integer[]; v2 varchar2[]; query varchar(2000); ret integer; begin c := dbe_sql.register_context(); query := 'insert into tbl(a,b) values(:v_1, :v_2);'; dbe_sql.sql_set_sql(c, query, 2); v1(1) := 1; v1(2) := 2; v2(1) := '1'; v2(2) := '2'; dbe_sql.sql_bind_array(c, 'v_1', v1); dbe_sql.sql_bind_array(c, 'v_2', v2); ret := dbe_sql.sql_run(c); dbe_sql.sql_unregister_context(c); end; / ANONYMOUS BLOCK EXECUTE select * from tbl order by a; -- 预期结果为: a | b ---+--- 1 | 1 2 | 2 (2 rows) -- 清理环境 drop table tbl; DROP TABLE -- 示例8 -- 前置条件 drop table if exists dbe_sql_tab; create table dbe_sql_tab(a int, b text, c raw, d text, e char, f int); insert into dbe_sql_tab values(1, '9', '5', '13', 'a', 1); insert into dbe_sql_tab values(2, '9', '6', '14', 'b', 2); insert into dbe_sql_tab values(3, '7', '7', '15', 'c', 3); insert into dbe_sql_tab values(4, '6', '8', '16', 'd', 4); DECLARE query varchar(2000); context_id int; execute_ret int; v_id int; v_ints int[]; v_texts text[]; v_raws raw[]; v_byteas bytea[]; v_chars character[]; v_type int[]; BEGIN query := ' select * from dbe_sql_tab order by 1'; context_id := dbe_sql.register_context(); dbe_sql.sql_set_sql(context_id, query, 1); DBE_SQL.SET_RESULT_TYPE_INTS(context_id, 1, v_ints, 3, 1); DBE_SQL.SET_RESULT_TYPE_TEXTS(context_id, 2, v_texts, 3, 1, 1024); DBE_SQL.SET_RESULT_TYPE_RAWS(context_id, 3, v_raws, 3, 1, 1024); DBE_SQL.SET_RESULT_TYPE_BYTEAS(context_id, 4, v_byteas, 3, 1, 1024); DBE_SQL.SET_RESULT_TYPE_CHARS(context_id, 5, v_chars, 3, 1, 1024); DBE_SQL.SET_RESULTS_TYPE(context_id, 6, v_type, 3, 1); execute_ret := dbe_sql.sql_run(context_id); loop v_id := dbe_sql.next_row(context_id); v_ints := DBE_SQL.GET_RESULTS_INT(context_id, 1, v_ints); v_texts := DBE_SQL.GET_RESULTS_TEXT(context_id, 2, v_texts); v_raws := DBE_SQL.GET_RESULTS_RAW(context_id, 3, v_raws); v_byteas := DBE_SQL.GET_RESULTS_BYTEA(context_id, 4, v_byteas); v_chars := DBE_SQL.GET_RESULTS_CHAR(context_id, 5, v_chars); v_type := DBE_SQL.GET_RESULTS(context_id, 6, v_type); exit when(v_id != 3); end loop; FOR i IN v_ints.FIRST .. v_ints.LAST LOOP dbe_output.print_line('int' || i || ' = ' || v_ints[i]); END LOOP; FOR i IN v_texts.FIRST .. v_texts.LAST LOOP dbe_output.print_line('text' || i || ' = ' || v_texts[i]); END LOOP; FOR i IN v_raws.FIRST .. v_raws.LAST LOOP dbe_output.print_line('raw' || i || ' = ' || v_raws[i]); END LOOP; FOR i IN v_byteas.FIRST .. v_byteas.LAST LOOP dbe_output.print_line('bytea' || i || ' = ' || v_byteas[i]); END LOOP; FOR i IN v_chars.FIRST .. v_chars.LAST LOOP dbe_output.print_line('char' || i || ' = ' || v_chars[i]); END LOOP; FOR i IN v_type.FIRST .. v_type.LAST LOOP dbe_output.print_line('type' || i || ' = ' || v_type[i]); END LOOP; dbe_sql.sql_unregister_context(context_id); END; / -- 预期结果为: int1 = 1 int2 = 2 int3 = 3 int4 = 4 text1 = 9 text2 = 9 text3 = 7 text4 = 6 raw1 = 05 raw2 = 06 raw3 = 07 raw4 = 08 bytea1 = \x3133 bytea2 = \x3134 bytea3 = \x3135 bytea4 = \x3136 char1 = a char2 = b char3 = c char4 = d type1 = 1 type2 = 2 type3 = 3 type4 = 4 ANONYMOUS BLOCK EXECUTE -- 清理环境 drop table if exists dbe_sql_tab; DROP TABLE -- 示例9 -- 前置条件 drop table if exists dbe_sql_tab; create table dbe_sql_tab(a int ,b int); insert into dbe_sql_tab values(1,3); DECLARE context_id int; type re_rssc is record (col_num int, desc_col dbe_sql.desc_tab); employer re_rssc; res re_rssc; d int; dd dbe_sql.desc_tab; query varchar(2000); BEGIN query := 'select * from dbe_sql_tab'; --打开游标 context_id := dbe_sql.register_context(); --编译游标 dbe_sql.sql_set_sql(context_id, query, 1); --执行 res := dbe_sql.sql_describe_columns(context_id, d,dd); --输出结果 dbe_output.print_line('col_num:' || res.col_num); dbe_output.print_line('col_type:' || res.desc_col[1].col_type); dbe_output.print_line('col_max_len:' || res.desc_col[1].col_max_len); dbe_output.print_line('col_name:' || res.desc_col[1].col_name); dbe_output.print_line('col_name_len:' || res.desc_col[1].col_name_len); dbe_output.print_line('col_schema_name:' || res.desc_col[1].col_schema_name); dbe_output.print_line('col_schema_name_len:' || res.desc_col[1].col_schema_name_len); dbe_output.print_line('col_precision:' || res.desc_col[1].col_precision); dbe_output.print_line('col_scale:' || res.desc_col[1].col_scale); dbe_output.print_line('col_charsetid:' || res.desc_col[1].col_charsetid); dbe_output.print_line('col_charsetform:' || res.desc_col[1].col_charsetform); dbe_output.print_line('col_null_ok:' || res.desc_col[1].col_null_ok); --关闭游标 dbe_sql.sql_unregister_context(context_id); END; / -- 预期结果为: col_num:2 col_type:23 col_max_len:4 col_name:a col_name_len:1 col_schema_name: col_schema_name_len:0 col_precision:0 col_scale:0 col_charsetid:0 col_charsetform:0 col_null_ok:true ANONYMOUS BLOCK EXECUTE -- 清理环境 drop table if exists dbe_sql_tab; DROP TABLE -- 示例10 drop table if exists dbe_sql_tab; create table dbe_sql_tab(a int); insert into dbe_sql_tab values(1); insert into dbe_sql_tab values(2); insert into dbe_sql_tab values(3); DECLARE query varchar(2000); context_id int; execute_ret int; v_id int; v_ints int[]; i1 integer; BEGIN query := 'select * from dbe_sql_tab order by 1'; context_id := dbe_sql.register_context(); dbe_sql.sql_set_sql(context_id, query, 1); DBE_SQL.SQL_SET_RESULTS_TYPE_C(context_id, 1, v_ints, 3, 1, i1, 0); execute_ret := dbe_sql.sql_run(context_id); loop v_id := dbe_sql.next_row(context_id); v_ints := DBE_SQL.SQL_GET_VALUES_C(context_id, 1, v_ints, i1); exit when(v_id != 3); end loop; FOR i IN v_ints.FIRST .. v_ints.LAST LOOP dbe_output.print_line('int' || i || ' = ' || v_ints[i]); END LOOP; dbe_sql.sql_unregister_context(context_id); END; / -- 预期结果为: int1 = 1 int2 = 2 int3 = 3 ANONYMOUS BLOCK EXECUTE -- 清理环境 drop table if exists dbe_sql_tab; DROP TABLE -- 示例11 CREATE OR REPLACE PROCEDURE test_proc(out_int out Integer, out_char out char, out_raw out raw, out_text out text) IS BEGIN out_int := 1; out_char := 'a'; out_raw := 'b'; out_text := 'c'; END; / CREATE PROCEDURE DECLARE cur NUMBER; query varchar(2000); ret integer; v_int Integer; v_char char; v_raw raw; v_text text; BEGIN cur := DBE_SQL.REGISTER_CONTEXT(); query := 'BEGIN test_proc(:v_int, :v_char, :v_raw, :v_text); END;'; DBE_SQL.SQL_SET_SQL(cur, query, 2); DBE_SQL.SQL_BIND_VARIABLE(cur, 'v_int', v_int); DBE_SQL.SQL_BIND_VARIABLE(cur, 'v_char', v_char, 1024); DBE_SQL.SQL_BIND_VARIABLE(cur, 'v_raw', v_raw, 1024); DBE_SQL.SQL_BIND_VARIABLE(cur, 'v_text', v_text, 1024); ret := DBE_SQL.SQL_RUN(cur); DBE_SQL.GET_VARIABLE_RESULT_INT(cur, 'v_int', v_int); v_char := DBE_SQL.GET_VARIABLE_RESULT_CHAR(cur, 'v_char'); DBE_SQL.GET_VARIABLE_RESULT_RAW(cur, 'v_raw', v_raw); v_text := DBE_SQL.GET_VARIABLE_RESULT_TEXT(cur, 'v_text'); DBE_OUTPUT.PRINT_LINE('v_int = ' || v_int); DBE_OUTPUT.PRINT_LINE('v_char = ' || v_char); DBE_OUTPUT.PRINT_LINE('v_raw = ' || v_raw); DBE_OUTPUT.PRINT_LINE('v_text = ' || v_text); DBE_SQL.SQL_UNREGISTER_CONTEXT(cur); END; / -- 预期结果为: v_int = 1 v_char = a v_raw = 0B v_text = c ANONYMOUS BLOCK EXECUTE -- 清理环境 drop procedure test_proc; DROP PROCEDURE -- 示例12 CREATE OR REPLACE PROCEDURE test_proc(out_int out Integer[], out_char out char[], out_raw out raw[], out_text out text[]) IS BEGIN out_int(0) := 1; out_char(0) := 'a'; out_raw(0) := 'b'; out_text(0) := 'c'; END; / CREATE PROCEDURE DECLARE cur NUMBER; query varchar(2000); ret integer; v_int Integer[]; v_char char[]; v_raw raw[]; v_text text[]; BEGIN cur := DBE_SQL.REGISTER_CONTEXT(); query := 'call test_proc(:v_int, :v_char, :v_raw, :v_text);'; DBE_SQL.SQL_SET_SQL(cur, query, 1); DBE_SQL.SQL_BIND_ARRAY(cur, 'v_int', v_int); DBE_SQL.SQL_BIND_ARRAY(cur, 'v_char', v_char); DBE_SQL.SQL_BIND_ARRAY(cur, 'v_raw', v_raw); DBE_SQL.SQL_BIND_ARRAY(cur, 'v_text', v_text); ret := DBE_SQL.SQL_RUN(cur); DBE_SQL.GET_ARRAY_RESULT_INT(cur, 'v_int', v_int); DBE_SQL.GET_ARRAY_RESULT_CHAR(cur, 'v_char', v_char); DBE_SQL.GET_ARRAY_RESULT_RAW(cur, 'v_raw', v_raw); DBE_SQL.GET_ARRAY_RESULT_TEXT(cur, 'v_text', v_text); DBE_OUTPUT.PRINT_LINE('v_int = ' || v_int(0)); DBE_OUTPUT.PRINT_LINE('v_char = ' || v_char(0)); DBE_OUTPUT.PRINT_LINE('v_raw = ' || v_raw(0)); DBE_OUTPUT.PRINT_LINE('v_text = ' || v_text(0)); DBE_SQL.SQL_UNREGISTER_CONTEXT(cur); END; / -- 预期结果为: v_int = 1 v_char = a v_raw = 0B v_text = c ANONYMOUS BLOCK EXECUTE -- 清理环境 drop PROCEDURE test_proc; DROP PROCEDURE
| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
更多详情请参考GaussDB 文档中心:<https://doc.hcs.huawei.com/db/zh-cn/gaussdbqlh/24.1.30/productdesc/qlh_03_0001.html>