从 PL/SQL 查询中选择dbms_output缓冲区?



我有一个存储过程mydb.iscustomereligible(someGUID),它在一个简单的结果集中返回'true''false'

如果客户不符合条件,则过程会打印dbms_output原因,例如reason code: Invalid Age: 2

如何改进以下语句以包含dbms_output文本?

select mydb.iscustomereligible('1F2629379C4FA046E050C90A0C5A3000') from dual;

这就是我到目前为止想出的(并且惨遭失败(,我无法让 dbms_output.get_line 工作

declare
v_Data dbms_output.chararr;
v_NumLines number;
begin
-- enable the buffer first
dbms_output.enable(1000000);
dbms_output.put_line('hi');
select mydb.iscustomereligible('1F2629379C4FA046E050C90A0C5A3000') from dual;
select dbms_output.get_line(???) from dual;
end;  

谢谢:)

下面是一个您不会修改的函数示例。我假设它只放了一行。

create or replace function iscustomereligible return boolean is
begin
dbms_output.enable(1000000);
dbms_output.put_line('hi');
return true;
end;
/

这是一个函数,它将连接您不会修改的函数的结果,显然由该函数编写dbms_output行。

create or replace function debug_iscustomereligible return varchar2 is
v_line varchar2(4000);
v_status number;
v_el     boolean;
begin
v_el := iscustomereligible;
dbms_output.get_line(v_line, v_status); -- ignoring v_status if null is ok
return 'customer ' || case v_el when true then 'eligible' else 'ineligible' end || ': ' || v_line;
end;
/

以下是如果您被迫仅通过执行查询来查询结果的方法。

select debug_iscustomereligible() from dual;

最新更新