Oracle 12c 子查询的 WITH 子句中的函数
Posted
技术标签:
【中文标题】Oracle 12c 子查询的 WITH 子句中的函数【英文标题】:Oracle 12c function in the WITH clause of subquery 【发布时间】: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 符号“文件结束”...
猜猜问题出在哪里?
提前致谢!
【问题讨论】:
【参考方案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才是问题的根源。非常感谢!以上是关于Oracle 12c 子查询的 WITH 子句中的函数的主要内容,如果未能解决你的问题,请参考以下文章
在 Oracle 中使用 connect by 在 with 子句中访问子查询中的父别名