Как выполнить хранимую процедуру оракула?

Я использую Oracle 10g Express Edition. Это хороший интерфейс для разработчиков БД. Но я сталкиваюсь с некоторыми проблемами при выполнении хранимых процедур.

Процедура:

create or replace procedure temp_proc is
begin
  DBMS_OUTPUT.PUT_LINE('Test');
end

он успешно создан. Но когда я выполню:

execute temp_proc;

показывает ORA-00900: неверный оператор SQL

Так что помощь нужна здесь

8 ответов

Решение

Execute это SQL * плюс синтаксис.. попробуйте обернуть ваш вызов в начало.. конец, как это:

begin 
    temp_proc;
end;

(Хотя Джеффри говорит, что это не работает в APEX ... но вы пытаетесь заставить его работать в SQLDeveloper ... попробуйте там меню "Выполнить".)

Оба "is" и "as" являются допустимым синтаксисом. По умолчанию выход отключен. Попробуйте процедуру, которая также позволяет вывод...

create or replace procedure temp_proc is
begin
  DBMS_OUTPUT.ENABLE(1000000);
  DBMS_OUTPUT.PUT_LINE('Test');
end;

... и вызвать его в блоке PLSQL...

begin
  temp_proc;
end;

... так как SQL не процедурный.

Oracle 10g Express Edition поставляется со встроенным Oracle Application Express (Apex). Вы запускаете это в окне команд SQL, которое не поддерживает синтаксис SQL*Plus.

Это не имеет значения, потому что (как вы обнаружили) синтаксис BEGIN...END работает в Apex.

Я использую oracle 12, и он говорит мне, что если вам нужно вызвать процедуру, используйте ключевое слово call. В вашем случае это должно быть:

begin
  call temp_proc;
end;

В Oracle SQL Developer (GUI) , используя 12c, также не забудьте включить окно DMBS Output (нажмите View => Dbms Output, затем нажмите знак «+» и выберите свое подключение ), по умолчанию окно не включено .

В этом окне будет выводиться следующий синтаксис:

      begin
  temp_proc
end;

Вы пытались исправить синтаксис, как это?:

create or replace procedure temp_proc AS
begin
  DBMS_OUTPUT.PUT_LINE('Test');
end;
begin 
    temp_proc;
end;

Я хочу напомнить вам, что "temp_proc" должен быть синонимом...

Вы можете просто сделать следующее в командном окне:

      Connected to Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 
Connected as XXX@YYY


SQL> call temp_proc();

Или же:

      SQL> execute temp_proc();
Другие вопросы по тегам