Sql 异常处理未输出到dbms
这是我的sql代码,用于计算圆的面积。我在获取dbms_输出以显示用户定义的异常时遇到问题 我首先将异常声明为零以下。然后,如果用户输入一个小于或等于0的数字,我将提高它。在异常情况下,我有dbms_输出,然后返回结果。它在查询结果中显示该值为null,但不显示输出 我已经打开了serveroutput并关闭了verify。我不知道为什么它不会输出任何东西。如果我单独运行该行,它将输出到dbms输出窗口,但不会在引发异常时输出Sql 异常处理未输出到dbms,sql,oracle,Sql,Oracle,这是我的sql代码,用于计算圆的面积。我在获取dbms_输出以显示用户定义的异常时遇到问题 我首先将异常声明为零以下。然后,如果用户输入一个小于或等于0的数字,我将提高它。在异常情况下,我有dbms_输出,然后返回结果。它在查询结果中显示该值为null,但不显示输出 我已经打开了serveroutput并关闭了verify。我不知道为什么它不会输出任何东西。如果我单独运行该行,它将输出到dbms输出窗口,但不会在引发异常时输出 create or replace function circle_
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;
我不确定我是否理解这个问题。如果启用了serveroutput,您发布的代码将生成输出到dbms_输出
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_输出的代码,也永远不会有只写入dbms_输出的异常处理程序
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