【发布时间】:2018-06-14 22:39:07
【问题描述】:
我一直在研究一个触发器,它可以在修改表时计算用户数。
表格:
SKN_ENJIN
ID NUMBER
ENJIN_NAME VARCHAR2(99)
EMAIL VARCHAR2(99)
IP_ADDRESS VARCHAR2(15)
STATUS NUMBER
SKN_ENJIN_COUNT
ID NUMBER
COUNT_DATE DATE
MEMBER_COUNT NUMBER
触发器
create or replace trigger "BI_SKN_ENJIN_COUNT_TG"
after insert or update or delete on "SKN_ENJIN"
DECLARE
mCount NUMBER;
mDate DATE;
begin
select COUNT(ID) into mCount from SKN_ENJIN where Status = 1;
select CURRENT_DATE into mDate from dual;
MERGE INTO SKN_ENJIN_COUNT c
USING (Select * from SKN_ENJIN_COUNT)
ON (TO_DATE(c.Count_date, 'MM-DD-YYYY') = TO_DATE(mDate, 'MM-DD-YYYY'))
WHEN MATCHED THEN
UPDATE SET c.Member_count = mCount
WHEN NOT MATCHED THEN
INSERT (Count_date, Member_count)
VALUES (mDate, mCount);
end;
当我手动将数据放入对象浏览器时,触发器工作正常。 当我将脚本放入 SQL 命令时,它也可以工作......
但是当我在应用程序中放置相同的数据时,我得到了这个错误:
Ajax call returned server error ORA-20987: APEX - ORA-01858: a non-numeric
character was found where a numeric was expected ORA-06512: at
"SOKAN_MEMBER_DATA.BI_SKN_ENJIN_COUNT_TG", line 11 ORA-04088: error during
execution of trigger 'SOKAN_MEMBER_DATA.BI_SKN_ENJIN_COUNT_TG' - Contact
your application administrator. Details about this incident are available
via debug id "835641798". for .
【问题讨论】:
-
mDate是date,因此将其转换为字符串并返回日期可能会导致转换错误。 (如果skn_enjin_count.count_date也是日期,那么同样适用。)在 Apex 环境中,您的nls_date_format可能不是'MM-DD-YYYY'。错误消息的 '非数字字符' 部分表明它有一个月的缩写,例如'DD-MON-YYYY'.
标签: oracle plsql oracle-apex