如何执行Oracle存储过程?

75

我正在使用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

所以需要帮助。


1
这适用于SQLPlus - 你是如何尝试运行它的? - OMG Ponies
1
首先我打开“转到数据库主页”,然后选择Home>SQL>SQL Commands。接着创建存储过程,最后执行。 - Rahbee Alvee
1
Oracle 10g Express Edition 10.2... - Rahbee Alvee
你使用哪个 SQL IDE - PLSQL Developer?Toad? - OMG Ponies
我没有使用任何集成开发环境。这是Oracle XE中提供的内置UI。但我找到了解决方案。开始 proc_name(); 结束 - Rahbee Alvee
7个回答

97

Execute是SQL*Plus语法..尝试像这样将您的调用包装在begin...end中:

Execute是SQL*Plus的一种命令语法,建议将其嵌套在begin...end代码块中使用。

begin 
    temp_proc;
end;

(尽管Jeffrey说这在APEX中不起作用,但你正在尝试在SQLDeveloper中运行它,请尝试在那里的“运行”菜单中运行。)


4

“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 是非过程化的。


4

Oracle 10g Express Edition附带了内置的Oracle Application Express(Apex)。您在其SQL命令窗口中运行此程序,该窗口不支持SQL*Plus语法。

这并不重要,因为(正如您已经发现的那样)BEGIN...END语法在Apex中可以工作。


1
在使用12c的Oracle SQL Developer (GUI)中,还要记得启用DMBS Output窗口(点击View => Dbms Output,然后点击"+"符号,并选择您的连接),默认情况下该窗口未启用。

DBMS Output window DBMS output window enabled

接下来的语法将会输出到这个窗口:

begin
  temp_proc
end;

1

我使用 Oracle 12,它告诉我如果需要调用存储过程,则需要使用call关键字。在你的情况下应该是:

begin
  call temp_proc;
end;

0

你可以在命令窗口上简单地执行以下操作:

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();

0

你尝试过像这样纠正语法吗?:

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

2
我看到的是你只是把IS改成了AS并在“end”关键字后添加了一个分号。虽然添加分号是可以的,但OP说编译成功了,所以那不可能是问题所在。问题在于OP不知道如何执行已经被正确处理的proc,在已接受的答案中已经解决了这个问题。因此,这个回答是错误的。 - nanosoft

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接