我们如何在 SQL*Plus 中编辑存储过程,以便我可以更正它


create or replace procedure minvalue(x in number,y in number,z in number)
 as
begin
  if x< y then
   z := x;
 else
  z:= y;
end if;
end;
/
compilation error.

在此代码中,x 和 y 是当用户运行此过程时取值的参数,z 取出答案。 此代码查找 x 和 y 之间的最小值,并通过 z 存储最小值。

我在 sql> 上创建了这个过程。 现在我如何再次将其放入缓冲区。 以便我可以修改/增强它。但是我不知道如何通过sql命令打开此过程。请帮助我。

在 SQL*Plus 中,ed 命令将在默认编辑器中打开您的最后一条语句(除非您在login.sql脚本中定义了其他内容(。

最好在体面的文本编辑器或 IDE 中将代码编写为脚本,并在 SQL*Plus 命令行上运行这些脚本。

因此,实际错误是这样的:

create or replace minvalue

那应该是create or replace procedure minvalue. 清除ORA-00922缺失或无效选项异常后,下一个问题是:

   c := x;

您尚未声明变量c因此这将引发ORA-00904无效标识符异常。

你只需要再次执行你的语句,它按照它所说的create or replace存储过程执行。

如果想知道发生了哪些错误,请在执行后输入show errors

PS:你不使用参数z那为什么会出现呢?如果要返回某些内容,则需要一个具有返回值的函数,而不是一个过程。

  1. 编译 PL/SQL 代码。
  2. 使用SHOW ERROR进行验证。
  3. 如果看到任何编译错误,请使用ed修改代码。
  4. 保存afiedt.buf文件。
  5. 您将看到修改后的代码已加载,只需使用 / 重新编译代码即可。

例如

SQL> set serveroutput on;
SQL>
SQL> BEGIN
  2     NULL;
  3  END;
  4  /
PL/SQL procedure successfully completed.
SQL> SHOW ERROR
No errors.
SQL> ed
Wrote file afiedt.buf
  1  BEGIN
  2     DBMS_OUTPUT.pUT_LINE('code modified');
  3* END;
SQL> /
code modified
PL/SQL procedure successfully completed.
SQL>

相关内容

最新更新