PKG_LIST_LOG.abc(package.function)返回一个类似{<PR=100:ORA-01403:无数据,SC=ORA-01403:没有找到数据,PSC=sp_ls:LA,EXEC_DATE=04-MAY-23>,}那么我如何在下面的过程中存储此信息并打印结果。
CREATE OR REPLACE PROCEDURE LIST_LOG(name VARCHAR2, id VARCHAR2, label VARCHAR2)
IS
v_query VARCHAR2(4000);
v_cursor SYS_REFCURSOR;
v_result VARCHAR2(4000);
BEGIN
CASE label
WHEN 'abc' THEN
v_query := 'SELECT PKG_LIST_LOG.abc('''||name||''','''||id||''','''||label||''') FROM DUAL';
OPEN v_cursor FOR v_query;
FETCH v_cursor INTO v_result;
-- EXECUTE IMMEDIATE v_query INTO v_result;
DBMS_OUTPUT.PUT_LINE(v_result);
ELSE
DBMS_OUTPUT.PUT_LINE('INVALID PARAMETERS');
END CASE;
END;
/
1条答案
按热度按时间qkf9rpyu1#
按照我的理解,你应该把
abc
函数的结果放到v_cursor
中。由于我没有您的表和数据(您也没有发布任何其他信息),这里有一个基于Scott的示例模式的示例。
函数返回ref游标:
过程调用该函数;第7章这就是你要做的在你的代码中没有任何动态的东西,所以你不需要编写一个调用函数的
select
语句,你也不应该打开一个游标--只需要使用函数返回的内容:测试:
这个输出是否正确?看起来像是: