【发布时间】:2018-07-11 22:52:24
【问题描述】:
有人知道是否可以使用在 PL/SQL 游标内定义本地函数的公用表表达式吗?
例如,此代码对我产生错误:
DECLARE
CURSOR LV_CUR IS
WITH function fct2(x number) return number is
begin
return 2*x;
end;
TEMP_AV AS
(
SELECT
fct2(LEVEL)
FROM
DUAL
CONNECT BY LEVEL < 10
)
SELECT
*
FROM
TEMP_AV;
BEGIN
FOR I IN LV_CUR
LOOP
NULL;
dbms_output.put_line(i.level);
END LOOP;
END;
错误是:
ORA-06550:Ligne 3,冒号 18: PL/SQL: ORA-00905: mot-clé 不存在 ORA-06550: Ligne 3,结肠 3: PL/SQL:忽略 SQL 语句 ORA-06550:第 6 行,第 5 行: PLS-00103:在预期以下情况之一时遇到符号“END”: 开始函数杂注过程子类型类型 当前光标删除 之前存在
我能够在 PL/SQL 之外执行查询(使用包含函数定义的公用表表达式)。
【问题讨论】:
-
我认为问题出在
with function。在创建光标之前尝试创建函数。 -
我尝试在declare bloc里面创建它,但是好像只能作为最后一个声明的对象,所以不能在游标中使用..
-
我的意思是如果你在 pl/sql 之外声明函数
-
好吧,但这是我想避免的!
-
检查HERE WITH子句中的函数
标签: sql oracle plsql cursor common-table-expression