【问题标题】:how we can edit stored procedure in sql*plus so that i can correct it我们如何在 sql*plus 中编辑存储过程以便我可以更正它
【发布时间】:2014-11-10 08:24:47
【问题描述】:
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命令打开这个程序。请帮助我。

【问题讨论】:

    标签: oracle plsql sqlplus


    【解决方案1】:

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

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

    所以,实际的错误是这样的:

    create or replace minvalue
    

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

       c := x;
    

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        【解决方案3】:
        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>
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-09-17
          • 2019-08-17
          • 2010-11-24
          • 2019-05-19
          • 2020-04-03
          • 1970-01-01
          • 2019-10-02
          • 1970-01-01
          相关资源
          最近更新 更多