我正在使用Oracle 10g Express Edition。它为数据库开发人员提供了一个很好的用户界面。但是我在执行存储过程时遇到了一些问题。
存储过程:
create or replace procedure temp_proc is
begin
DBMS_OUTPUT.PUT_LINE('Test');
end
创建成功,但是当我执行:
execute temp_proc;
显示ORA-00900: invalid SQL statement
所以需要帮助。
我正在使用Oracle 10g Express Edition。它为数据库开发人员提供了一个很好的用户界面。但是我在执行存储过程时遇到了一些问题。
存储过程:
create or replace procedure temp_proc is
begin
DBMS_OUTPUT.PUT_LINE('Test');
end
创建成功,但是当我执行:
execute temp_proc;
显示ORA-00900: invalid SQL statement
所以需要帮助。
Execute
是SQL*Plus语法..尝试像这样将您的调用包装在begin...end中:
Execute
是SQL*Plus的一种命令语法,建议将其嵌套在begin...end代码块中使用。
begin
temp_proc;
end;
(尽管Jeffrey说这在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;
你可以在命令窗口上简单地执行以下操作:
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();
你尝试过像这样纠正语法吗?:
create or replace procedure temp_proc AS
begin
DBMS_OUTPUT.PUT_LINE('Test');
end;