Одна вещь, которую вы, возможно, делаете неправильно, это попытка вызвать функцию или процедуру PL / SQL вне блока PL / SQL. Возможно, вам придется заключить вызовы в процедуры в begin
и end
, например:
SQL> dbms_lock.sleep(1);
SP2-0734: unknown command beginning "dbms_lock...." - rest of line ignored.
SQL> begin dbms_lock.sleep(1); end;
2 /
PL/SQL procedure successfully completed.
(Один /
в строке сам по себе говорит SQL * Plus, что это конец ввода. Обычно SQL * Plus использует точку с запятой для обозначения конца оператора. Однако PL / SQL может содержать точки с запятой и если SQL * Plus распознает, что вы вводите PL / SQL, он будет ждать одиночного /
самостоятельно, прежде чем передать свои данные в базу данных.)
Другая возможная причина ошибок, которые вы видите, заключается в том, что вы пытаетесь вызвать хранимую процедуру в запросе. Это невозможно, поскольку хранимая процедура не возвращает результата. По общему признанию, ошибка, которую вы получаете, если вы пытаетесь вызвать процедуру в запросе, не особенно полезна:
SQL> select dbms_alert.register('test') from dual;
select dbms_alert.register('test') from dual
*
ERROR at line 1:
ORA-00904: "DBMS_ALERT"."REGISTER": invalid identifier
Причиной этой ошибки, вероятно, является то, что Oracle не утруждает себя поиском среди хранимых процедур имени dbms_alert.register
, поэтому вместо этого выдает общую ошибку "Я не могу найти это имя".
Если ваша проблема не относится к числу тех, что я описал, пожалуйста, дайте мне знать.