Функция Oracle 12c: значение возвращается правильно, но не отображается в операторе выбора - PullRequest
0 голосов
/ 11 февраля 2019

У меня есть функция Oracle:

CREATE OR REPLACE FUNCTION "MYFUNC"
RETURN VARCHAR2
AS  
        lv_result VARCHAR2(50);
BEGIN               
        SELECT 'A' INTO lv_result FROM DUAL;
        DBMS_OUTPUT.PUT_LINE(lv_result);
        RETURN lv_result;
END;

Эта функция просто возвращает значение 'A'.

Если я вызываю функцию:

SELECT MYFUNC() FROM DUAL;

Этоне показывает никакого значения, только пустое.

Если я проверяю значение:

SELECT
CASE    
WHEN
    MYFUNC() = 'A' THEN
    'OK' ELSE 'NO' 
END AS RES
FROM DUAL;

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

Перед возвратомзначение, значение 'A' правильно выводится в DBMS_OUTPUT.

Версия Oracle - 12c.Я также тестировал в Oracle 11g, и он работает, так что, похоже, это просто проблема Oracle 12c.

Есть идеи, почему это происходит, и как вывести это значение с помощью оператора select?

1 Ответ

0 голосов
/ 11 февраля 2019

Какие 10 г это?У меня работает нормально на 10.2.0.5.0.

SQL> select * From v$version;

BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.5.0 - 64bi
PL/SQL Release 10.2.0.5.0 - Production
CORE    10.2.0.5.0      Production
TNS for Linux: Version 10.2.0.5.0 - Production
NLSRTL Version 10.2.0.5.0 - Production

SQL> CREATE OR REPLACE FUNCTION "MYFUNC"
  2  RETURN VARCHAR2
  3  AS
  4          lv_result VARCHAR2(50);
  5  BEGIN
  6          SELECT 'A' INTO lv_result FROM DUAL;
  7          DBMS_OUTPUT.PUT_LINE(lv_result);
  8          RETURN lv_result;
  9  END;
 10  /

Function created.

SQL> select myfunc() from dual;

MYFUNC()
-------------------------------------------------------------------
A

SQL>

Пробовал на 10.2.0.4.0 - тоже работает нормально.Я не думаю, что у меня есть другие базы данных 10g ...

Работает также на 12.2.0.1.0;это самая высокая версия, которую я имею.

...