0
我在視圖上創建了INSTEAD OF INSERT觸發器(請參閱下文),以在基礎表中插入一行。由於某些應用程序的限制,我們需要繼續此路線。觸發器中綁定變量的值oracle
1 CREATE OR REPLACE TRIGGER trigger_INSERT3 INSTEAD OF INSERT ON ISG_SESSION_TEMPFEB15_VIEW REFERENCING NEW AS n FOR EACH ROW
2 DECLARE
3 IsgSession ISG_SESSION_TEMPFEB15%rowtype;
4 row_count number;
5 fldtime ISG_SESSION_TEMPFEB15.fld_timestamp%type;
6 isgstart timestamp(6);
7 isgstop timestamp(6);
8 BEGIN
9 select count(*) into row_count FROM ISG_SESSION_TEMPFEB15
10 WHERE isg_session_id = :n.isg_session_id
11 AND nas_ip = :n.nas_ip
12 AND mac_address = :n.mac_address;
13 dbms_output.put_line('the value of row_count is '||ROW_COUNT);
14 IF row_count IS NULL then
15 fldtime:=to_timestamp_tz(:n.FLD_TIMESTAMP_TEMP,'RRRR-MM-DD"T"hh24:mi.SSXFFTZR') ;
16 isgstart:=to_timestamp_tz(:n.ISG_START_TIME_TEMP,'RRRR-MM-DD"T"hh24:mi.SSXFFTZR') ;
17 isgstop:=to_timestamp_tz(:n.ISG_STOP_TIME_TEMP,'RRRR-MM-DD"T"hh24:mi.SSXFFTZR') ;
18 end if ;
19 dbms_output.put_line('the values of fldtime,isgstart,isgstop are '||fldtime||','||isgstart||','||isgstop);
20* end;
21/
Trigger created.
SQL> set serveroutput on
SQL> insert into sanpalle.ISG_SESSION_TEMPFEB15_view(ISG_SESSION_ID,MAC_ADDRESS,NAS_IP,FLD_TIMESTAMP_TEMP,created_dte,isg_stop_time_temp) values
2 ('7000','7001','7002','2016-04-06T12:41:59.200Z','06-Apr-16 10.05.00.000000','2016-04-06T10:12:59.200Z');
the value of row_count is 0
the values of fldtime,isgstart,isgstop are ,,
1 row created.
SQL>
的問題是1)的變量(fldtime,isgstart,isgstop)的值顯示爲NULL 2)即使它表示 「1行創建」,其實行沒有被插入。 有人可以告訴我我要去哪裏嗎?提前致謝 。
正如您在輸出中看到的那樣,row_count的值爲零,因爲select與任何記錄都不匹配。此外,您正在檢查row_count是否爲null,而不是row_count爲零。所以沒有達到賦予fldtime,isgstart,isgstor的代碼 – cableload
另外,我沒有看到任何插入語句在你的觸發器中插入新行。 – cableload
@cableload - 把row_count = 0解決了這個問題。非常感謝你 – newbee