如何在sql developer中执行同时具有out参数和返回值的函数以获取结果

Posted

技术标签:

【中文标题】如何在sql developer中执行同时具有out参数和返回值的函数以获取结果【英文标题】:How to execute a function which has both out parameter and return value to get the result both in sql developer 【发布时间】:2020-06-23 14:47:39 【问题描述】:
create or replace FUNCTION RETURN_AP_ORDER_CUR (count_product OUT NOCOPY SYS_REFCURSOR)
RETURN SYS_REFCURSOR 
AS
APP_RECORDSET SYS_REFCURSOR;
i AP_ORDER%ROWTYPE;

BEGIN 

OPEN APP_RECORDSET FOR 
SELECT ORDER_ID,REGEXP_REPLACE(PRODUCT_NAME, '^\s', '') PRODUCT_NAME
   FROM
        (
         SELECT a.ORDER_ID, b.COLUMN_VALUE as PRODUCT_NAME
         FROM (SELECT ORDER_ID, PRODUCT_NAME FROM AP_ORDER) a 
         NATURAL JOIN TABLE(FNC_COL2ROW(PRODUCT_NAME)) b 
        );

RETURN APP_RECORDSET;

LOOP
 FETCH APP_RECORDSET INTO i;
EXIT WHEN APP_RECORDSET%NOTFOUND;
DBMS_OUTPUT.PUT_LINE(i.ORDER_ID||' '||i.PRODUCT_NAME);
INSERT INTO AP_ORDER_SPLIT (ORDER_ID,PRODUCT_NAME) VALUES (i.ORDER_ID,i.PRODUCT_NAME);
COMMIT;
END LOOP;
close APP_RECORDSET;

OPEN count_product FOR Select ORDER_ID,COUNT(1) from AP_ORDER_SPLIT group by ORDER_ID;
   
    EXCEPTION
WHEN TOO_MANY_ROWS THEN
 dbms_output.put_line('**Error** Several Values'); -- do something meaningful here 
WHEN NO_DATA_FOUND THEN
 dbms_output.put_line('There is no data in variable');
WHEN OTHERS THEN
  dbms_output.put_line('Error code ' || SQLCODE || SQLERRM);
   END RETURN_AP_ORDER_CUR;

如何使用绑定变量在 SQL 开发人员中获取输出参数和返回值的结果。

请分享一个匿名区块 请提出一些方法

将逗号分隔值存储到引用光标 在sql语句中使用函数来获取分隔值 获取计数数据到输出参数

【问题讨论】:

【参考方案1】:

一旦函数到达RETURN 语句,则不会执行任何其他代码,因此所有代码(循环、获取等)都被“跳过”。

一个简化的说明如何做到这一点:

SQL> create or replace function f_test (par_rc out nocopy sys_refcursor)
  2    return sys_refcursor
  3  is
  4    l_rc sys_refcursor;
  5  begin
  6    open par_rc for select * from dept;
  7
  8    open l_rc for select empno, ename, job, sal from emp
  9                  where deptno = 10;
 10
 11    return l_rc;
 12  end;
 13  /

Function created.

调用这样的函数:

SQL> declare
  2    l_out sys_refcursor;  -- will hold function's OUT parameter
  3    l_ret sys_refcursor;  -- will hold function's RETURN value
  4  begin
  5    l_ret := f_test(l_out);
  6  end;
  7  /

PL/SQL procedure successfully completed.

SQL>

【讨论】:

以上是关于如何在sql developer中执行同时具有out参数和返回值的函数以获取结果的主要内容,如果未能解决你的问题,请参考以下文章

如何从具有执行类型作为嵌入式查询的 Control-M 数据库作业运行 SQL Developer 中存在的存储过程

如何在SQL Developer中执行SQL Server存储过程?

如何在 Oracle SQL Developer 中多次执行相同的存储过程?

如何在 Oracle SQL Developer 中执行超过 100 万条插入查询?

oracle sql developer 如何同时打开多张表

pl sql developer应用问题