执行下面一个简单语句:
update
tbl_s1_m5_department t
set
t.dm_re = pkg_s1_soa_commons.get_department_fullname(t.dm_id)
由于pkg_s1_soa_commons.get_department_fullname(t.dm_id)获取的还是tbl_s1_m5_department 的值。所以报如下错误:
---------------------------
Error
---------------------------
ORA-04091: 表 SAL_MATERIAL.TBL_S1_M5_DEPARTMENT 发生了变化,触发器/函数不能读
ORA-06512: 在"SAL_MATERIAL.PKG_S1_M5_DEPARTMENT", line 62
ORA-06512: 在"SAL_MATERIAL.PKG_S1_SOA_COMMONS", line 372
ORA-06512: 在line 1
View program sources of error stack?
---------------------------
是(Y) 否(N)
---------------------------问:实际中,我只想修改字段t.dm_re,pkg_s1_soa_commons.get_department_fullname(t.dm_id)获取的值与该字段没有关系。能否有特殊的处理方式,完成该update?
update
tbl_s1_m5_department t
set
t.dm_re = pkg_s1_soa_commons.get_department_fullname(t.dm_id)
由于pkg_s1_soa_commons.get_department_fullname(t.dm_id)获取的还是tbl_s1_m5_department 的值。所以报如下错误:
---------------------------
Error
---------------------------
ORA-04091: 表 SAL_MATERIAL.TBL_S1_M5_DEPARTMENT 发生了变化,触发器/函数不能读
ORA-06512: 在"SAL_MATERIAL.PKG_S1_M5_DEPARTMENT", line 62
ORA-06512: 在"SAL_MATERIAL.PKG_S1_SOA_COMMONS", line 372
ORA-06512: 在line 1
View program sources of error stack?
---------------------------
是(Y) 否(N)
---------------------------问:实际中,我只想修改字段t.dm_re,pkg_s1_soa_commons.get_department_fullname(t.dm_id)获取的值与该字段没有关系。能否有特殊的处理方式,完成该update?
解决方案 »
- 有关触发器和临时表的问题,求高手指点……
- 请教一个Oracle9i操作问题
- "ORA-00604: 递归 SQL 层 1 出现错误 ORA-00942: 表或视图不存在" 我删除表的一列时报这样的错,有人说是权限的问题,不知是少什么权限?
- 一个SQL 问题。比较麻烦。请大家帮我一起动动脑子。
- Copy table problem, Onnline waiting, HELP,HELP!
- 救急!!
- 急急急急急....我的存储过程错在哪儿???各位,能帮我看一下吗?
- 这个MS SQL语句,在ORACLE 该如何写?
- 关于导出的汉字中出现?的问题
- select 问题求教
- 出生日期 系统时间
- 在Oracle 中,存储过程调用游标的sql语句,怎么写 ?
--TRY IT
DECLARE
ID NUMBER;
BEGIN
SELECT pkg_s1_soa_commons.get_department_fullname(tbl_s1_m5_department.dm_id) INTO ID FROM DUAL;
UPDATE tbl_s1_m5_department T
SET T.dm_re =ID;
COMMIT;
END;
一个update好像没办法做到吧!
ID NUMBER;
BEGIN
SELECT pkg_s1_soa_commons.get_department_fullname(tbl_s1_m5_department.dm_id) INTO ID FROM tbl_s1_m5_department;
UPDATE tbl_s1_m5_department T
SET T.dm_re =ID;
COMMIT;
END;
PS:如果问题还是得不到解决,那你就说说你的这个包是用来干什么的?返回一个还是多个,什么类型的结果值
tbl_s1_m5_department.dm_id这个是字段。可能是多值。简单的into肯定出问题。
它的目的就是通过该部门id,获取整个部门路径的名称!
procedure update_deparment is
v_cur pkg_s1_soa_commons.t_cursor;
v_id int;
v_re varchar2(32767);
v_arr_id pkg_s1_soa_commons.t_integer_array;
v_arr_memo pkg_s1_soa_commons.t_string_array;
begin
select
t.dm_id,
pkg_s1_soa_commons.get_department_fullname(t.dm_id)
bulk collect into
v_arr_id,
v_arr_memo
from
tbl_s1_m5_department t;
forall i in v_arr_memo.first..v_arr_memo.last
update
tbl_s1_m5_department t
set
t.dm_re = v_arr_memo(i)
where
t.dm_id = v_arr_id(i);
end update_deparment;