
# 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;
/
```
