Почему ниже код не компилируетсяНевозможно поставить спецификаторе функции в НАЧАТЬ/END блок
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
06550. 00000 - "line %s, column %s:\n%s"
Cause: Usually a PL/SQL compilation error.
Action:*
, тогда как
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 - Производство
Полезно включить ошибку, которую вы получаете от первой версии. Но 'select into' не совсем то же самое, что' select'. Возможно, синтаксис 'with function ...' еще не внесён в PL/SQL-версию; хотя, поскольку синтаксические диаграммы даже не показывают синтаксис CTE, трудно сказать. Используете ли вы 12cR1 или 12cR2 - возможно, он изменился между релизами? –
@AlexPoole Я добавил запрошенную вами информацию. – user2672165