【问题标题】:oracle - PLS-00103 & ORA -06550 on proceduresoracle - PLS-00103 & ORA -06550 关于程序
【发布时间】:2015-08-13 11:33:27
【问题描述】:

我在尝试运行一个使用过程的简单 PL/SQL 程序时遇到上述错误。不知道哪里出了问题,请帮忙。

declare
    create or replace procedure palindrome (x in number,y out number) is
    i integer;
    j integer;
    k integer:=0;
begin
    i:=x;
    while i>0
    loop
        j:=mod(i,10);
        k:=k*10+j;
        i:=i/10;
    end loop;
    y:=k;
end;
begin
    x integer:=121;
    y integer;
    palindrome(x,y);
    dbms_output.put_line(y);
end;

/ 第 2 行出现错误:

ORA-06550:第 2 行,第 2 列:PLS-00103:遇到符号 “CREATE”当期望以下之一时:开始函数杂注 过程子类型类型当前游标删除之前存在

【问题讨论】:

    标签: oracle ora-06550 pls-00103


    【解决方案1】:

    修改您的代码。

      create or replace procedure palindrome (x in number,y out number) is
        i integer;
        j integer;
        k integer:=0;
    
    begin
        i:=x;
        while i>0
        loop
            j:=mod(i,10);
            k:=k*10+j;
            i:=i/10;
        end loop;
        y:=k;
        dbms_output.put_line(y);
    end;
    

    /

    执行该过程

    declare
    y number;
    begin
     palindrome(133,y);
    end;
    

    【讨论】:

      【解决方案2】:

      当您创建包含变量声明的匿名 PL/SQL 块时,您只需要DECLARE。当您创建命名过程/函数/包时,您的CREATE OR REPLACE ... 语句将代替DECLARE。该语句和相应的BEGIN 之间的任何内容都称为声明部分。

      如果您尝试创建一个命名过程,然后您可以使用另一个 PL/SQL 匿名块调用该过程,这不是特别清楚,在这种情况下您会这样做:

      create or replace procedure palindrome (x in number,y out number) is
          i integer;
          j integer;
          k integer:=0;
      begin
          i:=x;
          while i>0
          loop
              j:=mod(i,10);
              k:=k*10+j;
              i:=i/10;
          end loop;
          y:=k;
      end;
      /
      
      declare
          x integer := 121;
          y integer;
      begin
          palindrome(x,y);
          dbms_output.put_line(y);
      end;
      /
      

      或者如果您尝试在匿名 PL/SQL 中声明一个过程,在这种情况下您会这样做:

      declare
          x integer := 121;
          y integer;
      
          procedure palindrome (x in number, y out number) is
              i integer;
              j integer;
              k integer := 0;
          begin
              i := x;
              while i > 0
              loop
                  j := mod(i,10);
                  k := k*10 + j;
                  i := i/10;
              end loop;
              y := k;
          end palindrome;
      begin
          palindrome(x,y);
          dbms_output.put_line(y);
      end;
      /
      

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-18
      • 1970-01-01
      • 2018-04-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多