2013-04-10 69 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;