Что касается примера call
, это объясняется в EXECUTE распознает хранимую процедуру, CALL не . Это не очевидно из документации по синтаксису, но требует скобок, поэтому (довольно бесполезно) отвергает все это и создает впечатление, что greetings
- это проблема, тогда как на самом деле это не так:
SQL> call greetings;
call greetings
*
ERROR at line 1:
ORA-06576: not a valid function or procedure name
при использовании обязательных скобок вы получите реальную проблему:
SQL> call greetings();
call greetings()
*
ERROR at line 1:
ORA-06553: PLS-306: wrong number or types of arguments in call to 'GREETINGS'
Как уже отмечали другие, вам не хватает параметра.
SQL> var n number
SQL>
SQL> call greetings(:n);
Call completed.
SQL> print :n
N
----------
134
execute
- это всего лишь удобный ярлык SQL * Plus для блока PL / SQL begin xxx; end;
, который менее суетлив в скобках и выдает одинаковое сообщение об ошибке с ними или без них.
(variable
и print
являются командами SQL * Plus и могут не поддерживаться в других средах.)