DBMS_OUTPUT.PUT_LINE не печатает внутри функции - PullRequest
0 голосов
/ 02 ноября 2018

Я работаю ниже фрагмента кода, где dbms_ouput ничего не печатает, а просто показывает функцию, успешно скомпилированную в SQL Developer.

set serveroutput on size 30000;
create or replace function check_status (p_user_name in varchar2) return number is
begin
DBMS_OUTPUT.PUT_LINE('Yoo');
end;
/

, где нижеприведенный фрагмент кода печатается. Я удивляюсь, почему он не печатает внутри функции.

set serveroutput on size 30000;
begin
DBMS_OUTPUT.PUT_LINE('Yoo');
end;
/

1 Ответ

0 голосов
/ 02 ноября 2018

У вас есть скомпилированная функция, но вы не вызвали ее. Код в функции будет запускаться только при вызове функции, поэтому правильно, чтобы он не показывал никаких выходных данных во время компиляции.

Ваша функция также должна возвращать значение; на данный момент звонить получит:

select check_status('test') from dual;

ORA-06503: PL/SQL: Function returned without value
ORA-06512: at "MYSCHEMA.CHECK_STATUS", line 4

Yoo

, который показывает вывод, но также и ошибки.

Итак, ваша функция должна что-то возвращать:

create or replace function check_status (p_user_name in varchar2) return number is
begin
  DBMS_OUTPUT.PUT_LINE('Yoo');
  return 42;
end;
/

Function CHECK_STATUS compiled

select check_status('test') from dual;

CHECK_STATUS('TEST')
--------------------
                  42

Yoo

Также обратите внимание, что любой, вызывающий функцию, увидит это Yoo, только если он включил вывод в своем сеансе или клиенте. Поскольку вы не можете контролировать это, вы не должны полагаться на это. Это в основном полезно для отладки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...