这是我的函数的sql代码,用于计算圆的面积。我无法获取dbms_output以显示用户定义的异常。
我首先宣布一个异常低于零。如果用户输入的数字小于或等于0,我会提高它。在异常中我有dbms_output然后返回结果。它在查询结果中显示该值为null,但输出未显示。
我已经设置了serveroutput并设置了验证关闭。我不知道为什么它不输出任何东西。如果我单独运行该行,它将输出到dbms输出窗口,但不会在引发异常时输出。
create or replace function circle_area
(p_radius number)
return number
is
c_Pi Constant number := acos(-1);
v_result number(10, 2);
underzero exception;
begin
if p_radius <=0 then
raise underzero;
else
v_result := c_pi * p_radius * p_radius;
return v_result;
end if;
exception
when underzero then
dbms_output.put_line('enter number greater than 0');
return v_result;
when others then
dbms_output.put_line('Exception Location: Anonymous Block');
dbms_output.put_line(sqlcode || ': ' || sqlerrm);
return v_result;
end circle_area;
调用函数:
select circle_area(-2) from dual;
答案 0 :(得分:0)
我不确定我是否理解这个问题。如果启用了serveroutput,那么您发布的代码将生成输出dbms_output
SQL> set serveroutput on;
SQL> create or replace function circle_area
2 (p_radius number)
3 return number
4 is
5 c_Pi Constant number := acos(-1);
6 v_result number(10, 2);
7 underzero exception;
8 begin
9 if p_radius <=0 then
10 raise underzero;
11 else
12 v_result := c_pi * p_radius * p_radius;
13 return v_result;
14 end if;
15
16 exception
17 when underzero then
18 dbms_output.put_line('enter number greater than 0');
19 return v_result;
20 when others then
21 dbms_output.put_line('Exception Location: Anonymous Block');
22 dbms_output.put_line(sqlcode || ': ' || sqlerrm);
23 return v_result;
24 end circle_area;
25 /
Function created.
SQL> select circle_area(-2) from dual;
CIRCLE_AREA(-2)
---------------
enter number greater than 0
我假设这是家庭作业的一部分而不是你所面临的真正问题。实际上,你永远不会编写主要目的是写入dbms_output
的代码,而你永远不会有一个只写入dbms_output
的异常处理程序。