1

我试图存储这一天,然后在 if 语句中使用它,但它不起作用....

它跳过如果全部

 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;
4

2 回答 2

2

首先,您几乎可以肯定要使用格式掩码fmDAY而不仅仅是DAY. DAY总是返回一个 9 个字符的字符串(假设会话设置为使用英语)。如果这一天不是星期三,它将用空格填充。fmDAY格式掩码删除空格填充。

其次,您的 IF 条件几乎可以肯定是不正确的。如果v_today不是NULL,则IF条件将评估为TRUE。例如,如果v_today是,将评估为 TRUE。并且由于评估为,因此条件评估为。我希望你想要SATURDAYv_today <> 'SUNDAY'TRUE or FALSETRUEIFTRUE

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

或者

IF( v_today != 'SATURDAY' and v_today != 'SUNDAY' )
于 2013-04-10T00:29:06.543 回答
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;

于 2013-10-10T04:16:35.733 回答