• AV © (24.09.12 09:37) [0]
    как бы Том Кайт рекомендует юзать функции/столбцы возвращающие char 'Y'|'N'

    но зачем тогда там boolean?

    пишу

    create or replace function f_IS_NOW_WORK(p_DT_FROM date, p_DT_TO date) return boolean is
     RES boolean;
    begin
     RES := (p_DT_FROM < sysdate and (p_DT_TO > sysdate or p_DT_TO is null));
     return RES;
    end;



    работает

    begin
     if f_is_now_work(sysdate + 10, sysdate + 10) then
       dbms_output.put_line('sysdate + 10, sysdate + 10');
     end if;
       
     if f_is_now_work(sysdate - 10, sysdate + 1) then
       dbms_output.put_line('sysdate - 10, sysdate + 1');
     end if;
       
     if f_is_now_work(sysdate - 10, sysdate -1) then
       dbms_output.put_line('sysdate - 10, sysdate - 1');
     end if;  
    end;


    sysdate - 10, sysdate + 1

    почему же не работает
    select
    *
    from
    main.t_services S
    join main.t_svc_ref SR on S.SVC_ID = SR.SVC_ID
    where
    SR.COD = '5500'
    and f_is_now_work(s.date_begin, s.date_end)  -- ORA-00920: неверен реляционный оператор
    ;

    как написать, что бы работало - знаю. Почему не работает так, как написано? Что мешает?
  • AV © (24.09.12 10:10) [1]
    сам думаю, что функции - это не SQL, поэтому не обязано работать.
    Но это не совсем удобно. Если поддерживаются - почему бы и не сделать
    where
    f()
  • Кщд (24.09.12 14:47) [2]
    AV ©   (24.09.12 10:10) [1]
    в Oracle SQL нет типа boolean.
Есть новые Нет новых   [119446   +39][b:0][p:0.001]