我做了一个测试,用下面的方法就可以输出你函数中的中间值。
SQL> create or replace function temp_func
2 return number is
3 begin
4 dbms_output.put_line('输出一个值');
5 return 1;
6 end;
7 /函数已创建。SQL>
SQL> declare
2 a number;
3 begin
4 a:=temp_func;
5 end;
6 /
输出一个值PL/SQL 过程已成功完成。我的理解是这样的,因为你调用函数时使用的是select语句,为了显示select的结果,就没有显示dbms_output.put_line输出的内容(但是该内容已进入输出缓存),当你随后调用任何使用dbms_output.put_line时,缓存中的内容就被显示出来了,所以你可以看到那些内容总是位于最前面。所以只要你是在匿名块或存储过程中调用函数,就可以显示调试信息了。
SQL> create or replace function temp_func
2 return number is
3 begin
4 dbms_output.put_line('输出一个值');
5 return 1;
6 end;
7 /函数已创建。SQL>
SQL> declare
2 a number;
3 begin
4 a:=temp_func;
5 end;
6 /
输出一个值PL/SQL 过程已成功完成。我的理解是这样的,因为你调用函数时使用的是select语句,为了显示select的结果,就没有显示dbms_output.put_line输出的内容(但是该内容已进入输出缓存),当你随后调用任何使用dbms_output.put_line时,缓存中的内容就被显示出来了,所以你可以看到那些内容总是位于最前面。所以只要你是在匿名块或存储过程中调用函数,就可以显示调试信息了。
那用过程可返加多参数,比函数好用.
-----------------------------------------------
SQL> set serveroutput on;
SQL> begin
2 dbms_output.put_line('输出一个值');
3 end;
4 /
v_canBeAdd is 1
输出一个值PL/SQL procedure successfully completed.
上面是最简单的调试过程。根本就不用调用函数,就可以直接显示调试信息。还有一种办法就是:SQL> set serverout on;
SQL> declare
2 a number;
3 begin
4 a:=ecoadd('21',to_date('2003-04-18','yyyy-mm-dd'));
5 end;
6 /
v_canBeAdd is 1PL/SQL procedure successfully completed.正如空杯大哥所说。
由此可见,此处输出,与调用函数关系不大。不调用函数也能输出结果!