异常处理没有输出到dbms

时间:2014-12-18 02:00:43

标签: sql oracle

这是我的函数的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;

1 个答案:

答案 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的异常处理程序。