2014-12-18 1 views
0

Вот мой код sql для функции, которая вычисляет площадь круга. У меня возникли проблемы с получением dbms_output, чтобы показать исключение, определяемое пользователем.Обработка исключений не выводится на dbms

Сначала я объявляю исключение недоразвитым. то я подниму его, если пользователь вводит число, меньшее или равное 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

я не уверен, что я понимаю эту проблему. Код размещен будет генерировать вывод dbms_output если SERVEROUTPUT включен ...

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.

Смежные вопросы