Почему не компилируется приведенный ниже код:
DECLARE
c number;
BEGIN
WITH
FUNCTION calculate(i IN NUMBER) RETURN NUMBER
AS
r number;
BEGIN
r := i*i;
RETURN r;
END;
select calculate(1) INTO c from dual;
END;
дает следующую ошибку:
Error report -
*ORA-06550: line 5, column 10:
PL/SQL: ORA-00905: missing keyword
ORA-06550: line 4, column 1:
PL/SQL: SQL Statement ignored
в то время как:
WITH
FUNCTION calculate(i IN NUMBER) RETURN NUMBER
AS
r number;
BEGIN
r := i*i;
RETURN r;
END;
select calculate(1) from dual;
компилируется?
Информация о версии Oracle
Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64-разрядная производственная версия
PL / SQL Release 12.1.0.2.0 - Production
select into
не совсем то же самое, чтоselect
. Возможно, синтаксисwith function ...
еще не вошел в версию PL / SQL; хотя, поскольку синтаксические диаграммы даже не показывают синтаксис CTE, это трудно сказать. Вы используете 12cR1 или 12cR2 - это могло измениться между выпусками? - person Alex Poole   schedule 09.01.2017