有人知道是否可以使用在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,colonne 18:PL / SQL:ORA-00905:mot-clé缺席ORA-06550:Ligne 3,colonne 3:PL / SQL:SQL语句忽略ORA-06550:Ligne 6,colonne 5: PLS-00103:当期望以下之一时遇到符号“END”:begin function pragma procedure子类型当前游标删除存在之前
我能够在PL / SQL之外执行查询(使用包含函数定义的公用表表达式) .
1 回答
是的,不是 . The 12.1 docs for the CURSOR statement明确说:
在这种情况下,这个文档是错误的,因为你可以有一个WITH子句,它显然不能在其中有新的12c PL / SQL声明 . 例如,这个块工作正常 .