返回首页

gbase数据、南大通用产品文档:GBase8s游标变量赋值

更新日期:2024年09月11日

可以使用另外的游标变量或者宿主变量给游标变量赋值。
target_cursor_variable := source_cursor_variable;
如果source游标变量是打开的,赋值后target游标变量也是打开的。两个游标变量指
向同一区域。
CREATE OR REPLACE PROCEDURE P_6_24 AS
cv1 SYS_REFCURSOR;
cv2 SYS_REFCURSOR;
v_lastname employees.last_name%TYPE; -- variable for last_name
v_jobid employees.job_id%TYPE; -- variable for job_id
v_employees employees%ROWTYPE; -- record variable row of table
BEGIN
OPEN cv1 FOR 'SELECT last_name, job_id FROM employees WHERE job_id =
''AD_PRES'' ORDER
BY last_name';
cv2 := cv1 ;
LOOP
FETCH cv2 INTO v_lastname, v_jobid;
EXIT WHEN cv2%NOTFOUND;
DBMS_OUTPUT.PUT_LINE( v_jobid );
END LOOP;
DBMS_OUTPUT.PUT_LINE( '-------------------------------------' );
CLOSE cv2;
END;
下面示例中,先把cv1赋值给cv2。再关闭游标变量cv1,当再次打开后,在oracle中,
游标变量cv2从现象上来看依然与cv1保持一致(指向新的SQL语句);本次版本在这种场
景下,cv2会处于不确定状态,可能指向旧的游标上下文,也可能指向cv1新打开的游标上
下文。要想再次引用cv2,只能给cv2重新赋值。
CREATE OR REPLACE PROCEDURE P_6_24 AS
cv1 SYS_REFCURSOR;

GBase 8s PL/SQL手册
南大通用数据技术股份有限公司
- 114 -

cv2 SYS_REFCURSOR;
v_lastname employees.last_name%TYPE; -- variable for last_name
v_jobid employees.job_id%TYPE; -- variable for job_id
v_employees employees%ROWTYPE; -- record variable row of table
BEGIN
OPEN cv1 FOR 'SELECT last_name, job_id FROM employees WHERE job_id =
''AD_PRES'' ORDER
BY last_name';
cv2 := cv1 ;
close cv1;
OPEN cv1 FOR 'SELECT last_name, job_id FROM employees WHERE job_id =
''AD_PRES'' ORDER
BY last_name';
LOOP
FETCH cv2 INTO v_lastname, v_jobid;
EXIT WHEN cv2%NOTFOUND;
DBMS_OUTPUT.PUT_LINE( v_jobid );
END LOOP;
DBMS_OUTPUT.PUT_LINE( '-------------------------------------' );
CLOSE cv1;
END;

ifx_lo_lock() 函数允许您锁定智能大对象中显式范围的字节。

语法
mint ifx_lo_lock(LO_fd, offset, whence, range, lockmode)
mint LO_fd;
int8 *offset;

GBase 8s ESQL/C 编程指南
南大通用数据技术股份有限公司
- 780 -

mint whence;

int8 *range;

mint lockmode;
LO_fd
要在其中锁定字节的范围的智能大对象的 LO 文件描述符。offset
指向指定偏移量的 8 字节整数(INT8)的指针,锁定始于智能大对象之内的该偏移
量。
whence
指定从被计算的偏移量的哪个点的 mint 常量:智能大对象的开始、智能大对象内的
当前位置或智能大对象的末尾。
range
指向指定要锁定的字节数的 8 字节整数(INT8)的指针。
lockmode
锁定指定的字节所采用的模式。对于排他锁,请设置为 LO_EXCLUSIVE_MODE,或
对于共享锁,请设置为 LO_SHARED_MODE。
用法
对于 LO_fd 指定的智能大对象,ifx_lo_lock() 函数锁定由 range 指定的字节数,始
于由 offset 和 whence 指定的位置。
ifx_lo_lock() 函数放置 lockmode 指定的类型的锁。

果您指定 ISSLOCK,则 ifx_lo_lock() 在字节范围上放置共享锁。如果您指定 ISXLOCK,
则 ifx_lo_lock() 在字节范围上放置排他锁。

在您调用 ifx_lo_lock() 之前,您必须取得有效的 LO 文件描述符,这需要通过调用
ifx_lo_create() 来创建新的智能大对象,或通过调用 ifx_lo_open() 来打开现有的智能大对
象。

ifx_lo_lock() 函数使用 whence 和 offset 参数来确定搜寻位置,如下:
whence 值标识从哪里开始搜寻。
有效的值包括 locator.h 头文件定义的下列常量。
Whence 常量
启动搜寻位置
LO_SEEK_SET
智能大对象的启动

GBase 8s ESQL/C 编程指南
南大通用数据技术股份有限公司
- 781 -

LO_SEEK_CUR
智能大对象中当前的搜寻位置
LO_SEEK_END
智能大对象的末尾
offset 参数标识以字节计的偏移量,从开始锁定的字节的(whence 参数指定的)起始
搜寻位置。

除了锁定 nbytes 之外,您还可锁定从指定的偏移量至大对象的末尾的字节,在此,
您可指定该大对象的当前末尾或最大末尾。您可使用两个整数常量(LO_CURRENT_END
和 LO_MAX_END)表示这些值。要使用这些值之一,首先将它转换为 int8 值,然后对
于 nbytes 参数使用它。

返回代码
0
函数成功。
< 0
函数不成功。返回的值为 sqlcode,其为 GBase 8s 错误消息的数目。


在对象资源管理器中,展开“表”节点,右键点击需要查看的表,再点击“打开表”。

在打开的”表浏览器”中就是表的内容。