2014-10-16 18 views
-1
BEGIN 
    DBMS_SCHEDULER.CREATE_JOB(
    JOB_NAME   => 'BillsDueCheck', 
    JOB_TYPE   => 'PLSQL_BLOCK', 
    JOB_ACTION  => 'BEGIN 
          UPDATE Customer C 
          SET C.Standing = 'B' 
          WHERE C.CustomerID IN (
           SELECT B.CUSTOMERID 
           FROM Bill B 
           WHERE (BillDate + 60) < SYSDATE); 
          END;', 
    START_DATE  => SYSTIMESTAMP, 
    REPEAT_INTERVAL => 'FREQ=DAILY' 
    END_DATE   => NULL, 
    ENABLED   => TRUE, 
    COMMENTS   => 'Checks if the bill is overdue' 
); 
END; 

在SET行,我想我必須做一些錯誤的進一步上漲出現的錯誤之一,當出現符號「B」,但我不知道。PLS-00103:期待以下

我已經嘗試通過它自己運行作業操作,它工作正常。

回答

2

您必須在'B'周圍加倍引號,否則oracle會認爲您的字符串已終止並嘗試將B解釋爲命令。

BEGIN 
    DBMS_SCHEDULER.CREATE_JOB(
    JOB_NAME   => 'BillsDueCheck', 
    JOB_TYPE   => 'PLSQL_BLOCK', 
    JOB_ACTION  => 'BEGIN 
          UPDATE Customer C 
          SET C.Standing = ''B'' 
          WHERE C.CustomerID IN (
           SELECT B.CUSTOMERID 
           FROM Bill B 
           WHERE (BillDate + 60) < SYSDATE); 
          END;', 
    START_DATE  => SYSTIMESTAMP, 
    REPEAT_INTERVAL => 'FREQ=DAILY' 
    END_DATE   => NULL, 
    ENABLED   => TRUE, 
    COMMENTS   => 'Checks if the bill is overdue' 
); 
END; 
+0

OOOOOOOOH感謝:P – 2014-10-16 14:06:15

+1

有時候,如果你有很多的字符串引號它可以成爲難以有很多雙引號的閱讀。然後另一種方法是使用「q」符號,例如'q'[這不使用雙引號]'。 – 2014-10-16 14:08:49

+0

你不會碰巧知道如何檢查日程表是否在運行嗎?它會在某處嗎? http://puu.sh/ceuSU/94668cdb4a.png – 2014-10-16 14:09:15

相關問題