Maverick
Maverick

Reputation: 215

PL SQL wrong output

I am trying to write a code which checks whether a number is binary or not. Here is my code.

declare
n INTEGER:=#
ch number:=0;

begin
loop
exit when n=0;
if(mod(n,10)!=0 or mod(n,10)!=1) then
ch:=1;
exit;
end if;
n:=n/10;
end loop;
if ch=1 then
dbms_output.put_line('Not a Binary number.');
else
dbms_output.put_line('Binary!!!');
end if;
end;
/

I am using Oracle 11g SQL Plus. Sometimes it is giving error at line 2. Here is the snippet of error.

old   2: n INTEGER:=#
new   2: n INTEGER:=;
n INTEGER:=;
           *
ERROR at line 2:
ORA-06550: line 2, column 12:
PLS-00103: Encountered the symbol ";" when expecting one of the following:
( - + case mod new not null <an identifier>

And if it is running correctly then for every number it is giving the same output as 'Not a Binary number.'.

Upvotes: 0

Views: 91

Answers (1)

Elfentech
Elfentech

Reputation: 747

Change the OR by AND in the IF statement. It seems to do what you want.

DECLARE
  n  INTEGER := &num;
  ch NUMBER := 0;

BEGIN
  LOOP
    EXIT WHEN n = 0;
    IF MOD(n, 10) != 0
       AND MOD(n, 10) != 1
    THEN
      ch := 1;
      EXIT;
    END IF;
    n := n / 10;
  END LOOP;
  IF ch = 1
  THEN
    dbms_output.put_line('Not a Binary number.');
  ELSE
    dbms_output.put_line('Binary!!!');
  END IF;
END;
/

Upvotes: 1

Related Questions