2014-02-08 4 views
0

Я пытаюсь написать код, который проверяет, является ли число двоичным или нет. Вот мой код.PL SQL неправильный вывод

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

Я использую Oracle 11g SQL Plus. Иногда он дает ошибку в строке 2. Вот фрагмент ошибки.

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> 

И если он работает правильно, то для каждого числа он дает тот же результат, как 'Not a Binary number.'.

+1

'мод (п, 10) = 0 или мод (п, 10) = 1' всегда ИСТИНА –

+1

Вы можете переписать вашу программу гораздо проще:' если REGEXP_LIKE (to_char (п), «^ [01] + $ ') then' –

+0

@EgorSkriptunoff Не могли бы вы объяснить '^ [01] + $' part? – Maverick

ответ

1

Измените OR на AND в инструкции IF. Кажется, он делает то, что вы хотите. !

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; 
/
Смежные вопросы