触发器oracle中绑定变量的值



我在一个视图上创建了一个INSTEAD OF INSERT触发器(见下文),以便在底层表中插入一行。由于一些应用程序的限制,我们需要继续执行此路由。

      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)的值显示为NULL2) 尽管上面写着"创建了1行",但实际上并没有插入该行。有人能告诉我哪里出了问题吗?提前谢谢。

ad 2)如果你用"insted of trigger"插入VIEW,你需要在这个触发器中插入子句到某个表。

insert into my_table(a,b,c) values(:n.a, :n.b, :n.c);

(我没有看到提交,也许你打开了自动命令-我不知道)

ad 1)条件

IF row_count IS NULL then 

为false,bacause null不为0,如果你有选择计数(*),那么就会有每次的数字,那么使用条件:

IF (row_count = 0) then
  • 1=空=假
  • 1!=null=false
  • 0=null=false
  • null为null=true

条件中的空值只需要运算符is/is not,并且不能与任何其他进行比较

最新更新