【问题标题】:Error in Oracle APEX 5.0 ORA-06550: line 5, column 9: PLS-00103: Encountered the symbol "START" when expecting one of the following: ) ,Oracle APEX 5.0 ORA-06550 中的错误:第 5 行第 9 列:PLS-00103:在预期以下情况之一时遇到符号“START”:),
【发布时间】:2018-01-12 07:00:33
【问题描述】:

我在 Oracle APEX 中使用以下代码更新并在表中插入一行,但是当我尝试更新数据时出现错误。它出现在 "if :EFFECTIVE_START_DATE >= SYSDATE then" 行。如果我删除这个“如果”条件,它就可以正常工作。

DECLARE

BEGIN

   IF :EFFECTIVE_START_DATE >= SYSDATE
   THEN
      xxxxx.pkg.UPDATE_DATA ( :APP_USER,
                             SYSDATE,
                             NVL ( :COMPANY_CODE, NULL),
                             NVL ( :COST_CENTER, NULL),
                             :USER_NAME,
                             TO_DATE ( :EFFECTIVE_START_DATE, 'DD-MON-YYYY'));

      xxxxx.pkg.UPDATE_DATA.INSERT_DATA (NVL ( :COMPANY_CODE, NULL),
                                         NVL ( :COST_CENTER, NULL),
                                         :USER_NAME,
                                         :USER_NAME_NEW,
                                         :EFFECTIVE_START_DATE,
                                         :EFFECTIVE_END_DATE,
                                         :APP_USER,
                                         SYSDATE,
                                         :APP_USER,
                                         SYSDATE);
   END IF;
EXCEPTION
   WHEN OTHERS
   THEN
      Raise_Application_Error (-20002, 'ERROR= ' || SQLERRM);
END;

ORA-06550:第 5 行,第 9 列:PLS-00103:遇到符号“START” 当期望以下之一时:) , * & = - + at in is mod 余数不是 rem => or != or ~= >= and or like2 like4 likec 之间 ||多重集成员子多重集

【问题讨论】:

  • 您调用的第二个过程的名称是否正确?你那里似乎有一个额外的“级别”。
  • 你的包裹叫'START'吗?你已经 XX 出的那部分?
  • 顺便说一句,异常处理程序没有任何用处,最好将其删除。如果您希望它包含现有的错误堆栈,请将第三个参数作为true 传递,而不是连接sqlerrm
  • :effective_start_date 的值是多少?第 9 列是什么(如错误消息中所述)?

标签: oracle plsql oracle-apex oracle-apex-5


【解决方案1】:

如 cmets 所示,您似乎已将句点 . 作为包和过程名称的一部分。如果是这种情况,您需要使用双引号 " 以确保 Oracle 知道这是名称的一部分,如下所示:

"START.pkg"."UPDATE_DATA"

"START.pkg"."UPDATE_DATA.INSERT_DATA"

假设这些是他们的名字。

【讨论】:

    【解决方案2】:

    试试这个,

    DECLARE
    BEGIN
      IF :EFFECTIVE_START_DATE >= SYSDATE THEN
        XXXXX.PKG.UPDATE_DATA(
                              :APP_USER,
                              SYSDATE,
                              NVL ( :COMPANY_CODE, NULL),
                              NVL ( :COST_CENTER, NULL),
                              :USER_NAME,
                              TO_DATE ( :EFFECTIVE_START_DATE, 'DD-MON-YYYY')
                             );
    
        XXXXX.PKG.INSERT_DATA(
                              NVL ( :COMPANY_CODE, NULL),
                              NVL ( :COST_CENTER, NULL),
                              :USER_NAME,
                              :USER_NAME_NEW,
                              :EFFECTIVE_START_DATE,
                              :EFFECTIVE_END_DATE,
                              :APP_USER,
                              SYSDATE,
                              :APP_USER,
                              SYSDATE
                             );
      END IF;
    EXCEPTION
    WHEN OTHERS THEN
      RAISE_APPLICATION_ERROR (-20002, 'ERROR= ' || SQLERRM);
    END;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-10-16
      • 2018-11-04
      • 2022-01-03
      • 1970-01-01
      • 1970-01-01
      • 2018-04-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多