我有一个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语句打印该值?
答案 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上运行;那是我的最高版本。