2013-04-10 70 views
1

我试图保存一天,然后用它在if语句,但它不工作....TO_CHAR和IF stament在Oracle 11g中

它跳过如果所有

select TO_CHAR(sysdate, 'DAY') into v_today from dual ; // save the day to v_today 

    if v_today <> 'SUNDAY' or v_today <> 'SATURDAY'// check for the vlaue of v_today 
    then 
     DBMS_OUTPUT.PUT_LINE('the office is open') ; 
    else 
     DBMS_OUTPUT.PUT_LINE('the office is close of the weekend') ; 
    end if; 

回答

2

首先,你几乎肯定希望使用格式掩码fmDAY而不仅仅是DAYDAY始终返回一个9个字符的字符串(假定会话设置为使用英语)。如果这一天不是星期三,它将被填充空格。格式掩码fmDAY删除空格填充。

其次,你的IF条件几乎肯定是不正确的。如果v_today不是NULL,则IF条件将评估为TRUE。例如,如果v_todaySATURDAY,则v_today <> 'SUNDAY'将评估为TRUE。并且因为TRUE or FALSE评估为TRUE,所以IF条件评估为TRUE。我希望你想要么

IF(v_today IN ('SATURDAY', 'SUNDAY')) 

IF(v_today != 'SATURDAY' and v_today != 'SUNDAY') 
+0

谢谢你现在工作 – 2013-04-10 00:50:15

0
CREATE OR REPLACE PROCEDURE P_1 
IS 
    v_today varchar2(20); 
    BEGIN 
    SELECT TO_CHAR(SYSDATE,'DAY') INTO v_today FROM DUAL; 
     if (v_today NOT IN('SATURDAY','SUNDAY')) THEN 
       DBMS_OUTPUT.PUT_LINE('the office is open') ; 
     ELSE 
       DBMS_OUTPUT.PUT_LINE('the office is close of the weekend') ; 
END IF; 
END; 

执行此过程 SET SERVEROUTPUT ON EXECUTE P_1;