Oracle 12c函数:正确返回值,但未在select语句中显示

时间:2019-02-11 12:29:10

标签: sql oracle plsql oracle12c

我有一个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 :(得分:3)

这是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上运行;那是我的最高版本。