ORACLE вывод логического сравнения - PullRequest
0 голосов
/ 18 апреля 2020

Я бы хотел получить вывод логического сравнения в oracle. В приведенном ниже примере выходные данные должны быть ложными, вместо этого выдается ошибка. Я пришел из sql мира серверов, где это очень просто. В oracle это, очевидно, совсем другое.

DECLARE
    test1 number := 1;
    test2 number := 2;
BEGIN
    dbms_output.put_line(test1 = test2);
END;

Ответы [ 2 ]

1 голос
/ 19 апреля 2020

Просто к вашему сведению. Я не написал серьезных Oracle в течение пары лет, но этот вопрос напомнил мне функцию, которую я выполняю. Это было очень удобная отладка без интерактивного отладчика. Думал, что поделюсь этим.

create or replace function boolean_to_text(test_in boolean)
return varchar2
is
begin
  return case when test_in then 'true' 
              when not test_in then 'false' 
              else 'null'
         end ; 
end boolean_to_text;

Где "test_in" - любое логическое выражение. Это работает, потому что выражение вычисляется до вызова функции. К сожалению, поскольку Oracle еще не поддерживает логический тип данных в SQL, его можно использовать только в pl sql.

-- tests
begin 
  dbms_output.put_line( '1=1 is ' || boolean_to_text(1=1) ); 
  dbms_output.put_line( '1=0 is ' || boolean_to_text(1=0) );   
  dbms_output.put_line( 'a>b is ' || boolean_to_text('a'>'b'));
  dbms_output.put_line( 'True>False ' || boolean_to_text(true>false) ); 
  dbms_output.put_line( 'Sysdate> 2020-05-18 is ' || boolean_to_text(Sysdate> date '2020-05-18') );   
  dbms_output.put_line( 'Null=Null is ' || boolean_to_text(null=null) );  
end; 
1 голос
/ 18 апреля 2020

Вы можете использовать условное выражение:

dbms_output.put_line(case when test1 = test2 then 1 else 0 end);

Демо :

dbms_output:
0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...