【发布时间】:2019-06-25 04:12:52
【问题描述】:
触发器在表上触发,但表上的选择返回 null。如何创建代码以访问触发触发器的行?
我在触发器中有以下内容:
begin
dws_edi_api.init_edi_message(message_id,order_no',supplier_no');
end;
这会在更新表 out_message_tab 中的 row_state 列时触发 事件触发正常,但是在程序 dws_edi_api.init_edi_message_line 中,我从 out_message_tab 中选择 c08,其中 message_id = message_id_ (来自触发器的变量)。它返回空值。 我认为更改尚未提交。我尝试在我的代码中添加一个提交作为第一行以强制提交更改,但这没有帮助。我尝试添加一个 dbms_lock.sleep(!0) 但这也无济于事。 我将代码添加到“显示一些代码框”中的过程
procedure init_edi_message_line(message_id in number) is
pragma autonomous_transaction;
message_id_ number;
order_no_ varchar2(20);
supplier_no_ varchar2(20);
c08_ varchar2(200);
cursor c1 is
select c08
from jdifs.out_message_line_tab
where message_id = message_id_
and name = 'HEADER';
begin
-- dbms_lock.sleep(10);
message_id_ := message_id;
open c1;
loop
fetch c1
into c08_;
exit when c08_ is not null;
insert into jdifs.jdws_temp_line_tab
values
(message_id_, '2', c08_, '4');
commit;
END LOOP;
close c1;
EXCEPTION
WHEN NO_DATA_FOUND THEN
-- Do something
null;
WHEN OTHERS THEN
null;
end init_edi_message_line;
编辑:
您好,不幸的是,这并没有解决问题, 我将再次尝试尽可能详尽地解释。 我在表上有一个名为 out_message_line_tab 的触发器。在该表中创建一行时,它包含大量列。
我感兴趣的是message_id(序列号)、order_no (P123456)、supplier_no(11242)、linenumber(1)、part_no (F1524)。
当触发器触发时,需要从该表中获取数据(在这种情况下,“连接到该表”的表是 out_message_tab。
所以触发器在 out_message_line_tab 上,但是将触发器中的值发送到过程是不够的,因为我还需要其他表中的一些数据。 表out_message_tab和out_message_line_tab之间的主键是message_id
所以我的问题是如何从 out_message_tab 中进行选择,其中 message_id = message_id(来自 out_message_line_tab 的主键
当我这样做时,它只是说找不到数据。我认为它是因为它还没有被提交。
我希望这更清楚。
【问题讨论】:
标签: select plsql transactions database-trigger