我在Oracle APEX中使用以下代码更新并在表中插入一行,但在尝试更新数据时出现错误。它出现在“if :EFFECTIVE_START_DATE >= SYSDATE then
”行。如果我删除这个“if”条件,它可以正常工作。
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是mod 余数不是rem => <>或!=或〜=> =< =<>和或 喜欢like2 like4 likec之间的|| multiset成员submultiset
答案 0 :(得分:0)
如评论中所示,您似乎已将句点.
作为程序包和过程名称的一部分。如果是这种情况,您需要使用双引号"
来确保Oracle知道这是名称的一部分,如下所示:
"START.pkg"."UPDATE_DATA"
和
"START.pkg"."UPDATE_DATA.INSERT_DATA"
假设这些是他们的名字。
答案 1 :(得分:-1)
Try this,
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;