Как выполнить хранимую процедуру оракула?
Я использую 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();