FRM-40735:插入后触发器引发未处理的异常ora-01722

时间:2019-04-09 05:36:02

标签: oracle oracle11g oracle10g oracleforms oracle-fusion-middleware

当我在Oracle Forms 11gR2上遇到此错误时,我在块上创建了POST-INSERT触发器

“ FRM-40735:插入后触发器引发未处理的异常ora-01722”

POST-INSERT触发代码:

Insert into we_group (GROUP_ID, GROUP_SIZE, NRSP_STATUS, GROUP_RECEIVED)
Select DISTINCT GROUP_ID, ('Select COUNT(*) from we_group_hof_k'), 
nrsp_status, sysdate
from we_group_hof_k;

commit_form;

如何解决这个问题?

3 个答案:

答案 0 :(得分:0)

删除'以防止数字转换为字符

 Select DISTINCT GROUP_ID, (select COUNT(*) from we_group_hof_k), 
 nrsp_status, sysdate
 from we_group_hof_k;

答案 1 :(得分:0)

考虑使用COUNT函数的分析版本(如果您使用的Forms版本支持它; 10g不支持,我不能说11g):

INSERT INTO we_group (GROUP_ID,
                      group_size,
                      nrsp_status,
                      group_received)
   SELECT DISTINCT GROUP_ID,
                   COUNT (*) OVER (ORDER BY NULL),
                   nrsp_status,
                   SYSDATE
     FROM we_group_hof_k;

答案 2 :(得分:0)

显然ORA-01722出现加注是由于尝试插入带引号的字符串

'Select COUNT(*) from we_group_hof_k'到数字列(GROUP_SIZE)。

因此,首先,您需要除去那些引号,甚至是整个子选择,因为您已经尝试从主查询中的同一张表中进行选择,而只需考虑包含一个group by子句代替:

Insert Into we_group(group_id, group_size, nrsp_status, group_received)
  Select group_id,Count(1),nrsp_status, sysdate
    From we_group_hof_k
   Group By group_id,nrsp_status;

最后不要在commit触发器内使用commit_formPOST-INSERT,认为在那里使用是非法的。