我们如何编辑sql * plus中的存储过程,以便我可以纠正它

时间:2014-11-10 08:24:47

标签: oracle plsql sqlplus

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是当用户运行此过程并取出答案时获取值的参数。此代码查找x和y之间的最小值,并通过z存储最小值。

我在sql&gt;上创建了这个过程。现在我怎么能把它再次放入缓冲区。这样我就可以修改/增强它。但是我不知道如何通过sql命令打开这个过程。请帮助我。

3 个答案:

答案 0 :(得分:2)

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

将代码编写为体面文本编辑器或IDE中的脚本并在SQL * Plus命令行中运行这些脚本是一种很好的做法。

所以,实际的错误是:

create or replace minvalue

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

   c := x;

您尚未声明变量c,因此这将导致ORA-00904无效的标识符异常。

答案 1 :(得分:1)

你只需要再次执行你的语句,就像它说create or replace存储过程一样。

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

PS:你不能使用参数z,为什么会这样?如果你想返回一些东西,你需要一个带有返回值的函数而不是一个过程。

答案 2 :(得分:1)

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

    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>