文档首页/数据库和应用迁移 UGO/用户指南/语法转换指南/转换错误码/Oracle To GaussDB 转换错误码/U0100081:GaussDB不支持 DBMS_SQL.TO_REFCURSOR 函数
更新时间:2026-03-19 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
l_cursor_id := DBMS_SQL.OPEN_CURSOR;
DBMS_SQL.PARSE (l_cursor_id, 'SELECT id, name FROM test_table', DBMS_SQL.NATIVE);
l_return := DBMS_SQL.EXECUTE (l_cursor_id);
l_ref_cursor := DBMS_SQL.TO_REFCURSOR (l_return);
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;
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
--l_cursor_id := DBE_SQL.REGISTER_CONTEXT();
--DBE_SQL.SQL_SET_SQL(l_cursor_id, 'SELECT id, name FROM test_table', 2);
--l_ref_cursor := DBMS_SQL.TO_REFCURSOR(l_return);
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;
CLOSE l_ref_cursor;
END;
/ 
