Sql 异常处理未输出到dbms

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

这是我的sql代码,用于计算圆的面积。我在获取dbms_输出以显示用户定义的异常时遇到问题

我首先将异常声明为零以下。然后,如果用户输入一个小于或等于0的数字,我将提高它。在异常情况下,我有dbms_输出,然后返回结果。它在查询结果中显示该值为null,但不显示输出

我已经打开了serveroutput并关闭了verify。我不知道为什么它不会输出任何东西。如果我单独运行该行,它将输出到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;

我不确定我是否理解这个问题。如果启用了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