2013-04-10 2 views
1

내가 if 문에 다음 날 저장을 사용하려고하지만 그것이 생략 ....TO_CHAR 및 Oracle 11g의 stament이

를 작동하지 않는 경우 오프 모든

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

첫 번째 경우, 거의 확실하게 DAY이 아닌 fmDAY 형식의 마스크를 사용하려고합니다. DAY은 항상 9 문자 문자열을 반환합니다 (세션이 영어를 사용한다고 가정). 그날이 수요일이 아닌 다른 날이면, 그것은 공간이 채워질 것입니다. fmDAY 형식 마스크는 공간 패딩을 제거합니다.

둘째, IF 조건이 거의 틀립니다. v_todayNULL이 아닌 경우 IF 조건은 TRUE으로 평가됩니다. v_todaySATURDAY 인 경우, 예를 들어 v_today <> 'SUNDAY'은 TRUE로 평가됩니다. TRUE or FALSETRUE으로 계산되므로 IF 조건은 TRUE으로 평가됩니다. 난 당신이 중 하나를

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

또는

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

감사합니다. –

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을 수행 할 것으로 기대 P_1을 EXECUTE;

관련 문제