0
votes

I'm getting the above error while trying to run a simple PL/SQL program that uses procedures. I dont know what went wrong, please help out.

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;

/ ERROR at line 2:

ORA-06550: line 2, column 2: PLS-00103: Encountered the symbol "CREATE" when expecting one of the following: begin function pragma procedure subtype type current cursor delete exists prior

2

2 Answers

0
votes

Modifications to your code.

  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;

/

Execute that procedure

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

You only need DECLARE when you're creating an anonymous PL/SQL block that contains variable declarations. When you're creating a named procedure/function/package, then your CREATE OR REPLACE ... statement takes the place of the DECLARE. Anything between that statement and the corresponding BEGIN is known as the declaration section.

It's not especially clear if you're trying to create a named procedure that you can then call with another PL/SQL anonymous block, in which case you'd do:

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;
/

or if you're trying to declare a procedure inside an anonymous PL/SQL, in which case you'd do:

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;
/