当我在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;
如何解决这个问题?
答案 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_form
或POST-INSERT
,认为在那里使用是非法的。