【问题标题】:Oracle 12c Function: value returned correctly but not shown in select statementOracle 12c 功能:正确返回值但未在 select 语句中显示
【发布时间】:2019-02-11 12:29:10
【问题描述】:

我有一个 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;

那么结果就OK了,所以返回值是正确的。

在返回值之前,“A”值被正确打印到 DBMS_OUTPUT。

Oracle 版本是 12c。 我也在 Oracle 11g 中进行了测试,它可以工作,所以它似乎只是 Oracle 12c 的问题。

任何想法为什么会发生这种情况以及如何使用 select 语句打印该值?

【问题讨论】:

  • 您确定在 12c 环境中调用该函数时启用了 SERVEROUTPUT 吗?

标签: sql oracle plsql oracle12c


【解决方案1】:

10g是多少?在 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;这是我拥有的最高版本。

【讨论】:

  • 对不起,我刚刚使用您的查询进行了检查,版本是:Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit 我知道它是 10g...我会更新问题,谢谢!
  • 我没有 12.1.0.2.0,但在 12.2.0.1.0 上运行正常。会不会是你版本的bug?嗯,但这确实是微不足道的案例,我 - 不知何故 - 怀疑它。
  • 顺便问一下,您能在不同的工具中检查它吗,例如 SQL*Plus、SQL Developer、TOAD、Apex(如果有的话;请参阅它的 SQL Workshop)?
  • 正如你所建议的,我使用 SQL*PLus 进行了检查,它可以工作。所以这是一个客户端错误,使用的客户端是 Navicat Premium 12。我会将这个问题标记为已关闭,谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-02-17
  • 1970-01-01
  • 2016-12-06
  • 2012-04-16
  • 2013-06-12
  • 2019-10-11
  • 2016-10-21
相关资源
最近更新 更多