Oracle PLS-00103:在预期以下情况时遇到符号“B”
错误发生在设定线,我想我一定是做错了什么,但我不确定Oracle PLS-00103:在预期以下情况时遇到符号“B”,oracle,plsql,Oracle,Plsql,错误发生在设定线,我想我一定是做错了什么,但我不确定 我已尝试自行运行作业操作,效果良好。您必须在“B”周围加上两倍引号,否则oracle会认为您的字符串已终止,并尝试将B解释为命令 BEGIN DBMS_SCHEDULER.CREATE_JOB( JOB_NAME => 'BillsDueCheck', JOB_TYPE => 'PLSQL_BLOCK', JOB_ACTION => 'BEGIN
我已尝试自行运行作业操作,效果良好。您必须在“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;
有时,如果字符串中有很多引号,那么用很多双引号就很难阅读。另一种方法是使用q表示法,例如q“[这不是使用双引号]”。您也不会碰巧知道如何检查计划是否正在运行,是吗?它会在这里的某个地方吗?
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;