如何在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 万条插入查询?