更新时间:2025-06-04 GMT+08:00

U0100083:GaussDB不支持 DBMS_SQL.RETURN_RESULT 函数

描述

Oracle12C引入DBMS_SQL.RETURN_RESULT:动态 SQL 中隐式返回结果集,不需要显示声明出参sys_refcursor,注意可以同时返回多个结果集。

GaussDB 不支持 DBMS_SQL.RETURN_RESULT函数。

数据库类型与版本

  • 源库类型与版本:UGO 支持的 Oracle 版本。
  • 目标库类型与版本:UGO 支持的 GaussDB 版本。

语法示例

CREATE OR REPLACE PROCEDURE get_dynamic_results (p_min_salary IN NUMBER)
AS
    l_cursor SYS_REFCURSOR;
BEGIN
    -- 返回第一个结果集:员工信息
    OPEN l_cursor FOR
        SELECT emp_id, emp_name, salary
        FROM employees
        WHERE salary >= p_min_salary;
    DBMS_SQL.RETURN_RESULT(l_cursor);

    -- 返回第二个结果集:部门信息
    OPEN l_cursor FOR
        SELECT dept_id, dept_name, location
        FROM departments;
    DBMS_SQL.RETURN_RESULT(l_cursor);
END;
/

改造建议

注释掉 DBMS_SQL.RETURN_RESULT,返回几个结果集,多加几个out出参,参数类型是sys_refcursor,注意出参变量名字不可重复。

GaussDB改写后:

CREATE OR REPLACE PROCEDURE get_dynamic_results (p_min_salary IN NUMBER, l_cursor out SYS_REFCURSOR,l_cursor2 out SYS_REFCURSOR)
AS
   --- l_cursor SYS_REFCURSOR;
BEGIN
    -- 返回第一个结果集:员工信息
    OPEN l_cursor FOR
        SELECT emp_id, emp_name, salary
        FROM employees
        WHERE salary >= p_min_salary;
 --   DBMS_SQL.RETURN_RESULT(l1_cursor);

    -- 返回第二个结果集:部门信息
   OPEN l_cursor2 FOR
       SELECT dept_id, dept_name, location
        FROM departments;
    ---DBMS_SQL.RETURN_RESULT(l_cursor);
END;
/