【问题标题】:Error being thrown with trigger: ORA-20987: APEX - ORA-01858 ORA-06512使用触发器引发错误:ORA-20987: APEX - ORA-01858 ORA-06512
【发布时间】: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 .

【问题讨论】:

  • mDatedate,因此将其转换为字符串并返回日期可能会导致转换错误。 (如果 skn_enjin_count.count_date 也是日期,那么同样适用。)在 Apex 环境中,您的 nls_date_format 可能不是 'MM-DD-YYYY'。错误消息的 '非数字字符' 部分表明它有一个月的缩写,例如'DD-MON-YYYY'.

标签: oracle plsql oracle-apex


【解决方案1】:

您不需要对日期变量/列执行 TO_DATE 转换。它首先产生到 varchar2 的隐式转换,然后再返回日期。

尝试简单截断日期(时间设置为 00:00:00)。

所以不是这个:

ON (TO_DATE(c.Count_date, 'MM-DD-YYYY') = TO_DATE(mDate, 'MM-DD-YYYY'))

使用这个:

ON (trunc(c.Count_date) = trunc(mDate))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-08-06
    • 1970-01-01
    • 2013-11-29
    • 2020-03-10
    • 1970-01-01
    • 2022-01-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多