【问题标题】:Oracle 12c function in the WITH clause of subqueryOracle 12c 子查询的 WITH 子句中的函数
【发布时间】:2017-09-20 07:19:16
【问题描述】:

我对 WITH 子句中的子查询有疑问。

Oracle 版本:12c Enterprise Edition Release 12.1.0.2.0 - 64b

WITH
  FUNCTION upper_string(p_string IN VARCHAR2) RETURN VARCHAR2
  IS
  BEGIN
    RETURN UPPER(p_string);
  END;
SELECT upper_string AS ret_val
FROM dual;  

我来了

PLS-103: Encoutered 符号“文件结束”...

猜猜问题出在哪里?

提前致谢!

【问题讨论】:

    标签: oracle


    【解决方案1】:

    Here 你可以找到一些关于 WITH 子句增强的信息。您可以尝试使用:

    WITH
      FUNCTION upper_string(p_string IN VARCHAR2) RETURN VARCHAR2
      IS
      BEGIN
        RETURN UPPER(p_string);
      END;
    SELECT upper_string AS ret_val
    FROM dual
    /
    

    【讨论】:

    • 你忘记了参数:ORA-06553: PLS-306: wrong number or types of arguments in call to 'UPPER_STRING'
    【解决方案2】:

    在您的选择中,您没有将参数传递给函数。

     SELECT upper_string('something to upper') AS ret_val
       FROM dual; 
    

    但错误可能表明您处于旧环境中,不支持 12c 的语法。

    【讨论】:

    • 您对参数是正确的(我的错)。 “旧环境”是什么意思,我该如何理解?
    • 可能是 oracle 客户端 9i、sqlplus 9i 或您的工具。
    • 向函数添加参数后,我在 sqlplus 12c 和 TOAD 中运行查询没有任何问题,但在 sqlplus 11g 中它给出的错误与您的完全相同 - ORA-06553: PLS-103: Encountered the symbol "end-of-file" when expecting...
    • 所以老版本的sqlplus才是问题的根源。非常感谢!
    猜你喜欢
    • 2016-12-30
    • 1970-01-01
    • 1970-01-01
    • 2015-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-09
    • 1970-01-01
    相关资源
    最近更新 更多