Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle PLS-00103:在预期以下情况时遇到符号“B”_Oracle_Plsql - Fatal编程技术网

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;