文档首页/
数据库和应用迁移 UGO/
用户指南/
语法转换指南/
转换错误码/
Oracle To GaussDB 转换错误码/
U0100081:GaussDB不支持 DBMS_SQL.TO_REFCURSOR 函数
更新时间:2025-06-04 GMT+08:00
U0100081:GaussDB不支持 DBMS_SQL.TO_REFCURSOR 函数
描述
Oracle:DBMS_SQL.TO_REFCURSOR 用于将 DBMS_SQL 游标 ID 转换为 REF CURSOR。
GaussDB:不支持DBMS_SQL.TO_REFCURSOR。
数据库类型与版本
- 源库类型与版本:UGO 支持的 Oracle 版本。
- 目标库类型与版本:UGO 支持的 GaussDB 版本。
语法示例
CREATE OR REPLACE PROCEDURE DBMS_SQL_TO_REFCURSOR AS l_cursor_id INTEGER; l_ref_cursor SYS_REFCURSOR; l_id NUMBER; l_name VARCHAR2 (100); l_return INTEGER; BEGIN -- 打开 DBMS_SQL 游标 l_cursor_id := DBMS_SQL.OPEN_CURSOR; -- 解析 SQL 语句 DBMS_SQL.PARSE (l_cursor_id, 'SELECT id, name FROM test_table', DBMS_SQL.NATIVE); -- 执行查询 l_return := DBMS_SQL.EXECUTE (l_cursor_id); -- 将 DBMS_SQL 游标转换为 REF CURSOR l_ref_cursor := DBMS_SQL.TO_REFCURSOR (l_return); -- 使用 REF CURSOR 处理结果集 LOOP FETCH l_ref_cursor INTO l_id, l_name; EXIT WHEN l_ref_cursor % NOTFOUND; DBMS_OUTPUT.PUT_LINE ('ID: ' || l_id || ', NAME: ' || l_name); END LOOP; -- 关闭 REF CURSOR CLOSE l_ref_cursor; END; /
改造建议
GaussDB 不支持 DBMS_SQL.TO_REFCURSOR 函数,将DBMS_SQL.TO_REFCURSOR改写为open cursor for ...。
create or replace procedure DBMS_SQL_TO_REFCURSOR as l_cursor_id NUMBER(38); l_ref_cursor SYS_REFCURSOR; l_id NUMBER; l_name VARCHAR2(100); l_return NUMBER(38); BEGIN -- 打开 DBMS_SQL 游标 -- l_cursor_id := DBE_SQL.REGISTER_CONTEXT(); -- 解析 SQL 语句 -- DBE_SQL.SQL_SET_SQL(l_cursor_id, 'SELECT id, name FROM test_table', 2); -- 将 DBMS_SQL 游标转换为 REF CURSOR --l_ref_cursor := DBMS_SQL.TO_REFCURSOR(l_return); -- 使用 REF CURSOR 处理结果集 open l_ref_cursor for SELECT id, name FROM test_table; LOOP FETCH l_ref_cursor INTO l_id, l_name; EXIT WHEN l_ref_cursor%NOTFOUND; DBE_OUTPUT.PRINT_LINE('ID: ' || l_id || ', NAME: ' || l_name); END LOOP; -- 关闭 REF CURSOR CLOSE l_ref_cursor; END; /