很久没有玩这些玩意了,顺记录下WJ兄编写的触发器,大致实现的功能就是:当用户网terminal表插入一条记录时候顺便网ftp_user表插入一条记录,而后者表中
需要用到terminal表中的部分字段内容比如terminalseril字段,其中:new.terminalseril表示就是terminal表中新插入的这条记录的terminalseril值。现在对关键字做一下说明 :NEW 和:OLD使用方法和意义,new 只出现在insert和update时,old只出现在update和delete时。在insert时new表示新插入的行数据,update时new表示要替换的新数据、old表示要被更改的原来的数据行,delete时old表示要被删除的数据。触发器类型大致分为:事前触发和事后触发,具体可以google更详细。
create or replace trigger tib_terminal_insertFtp before insert
on Terminal for each row
declare
integrity_error exception;
errno integer;
errmsg char(200);
begin
insert into FTP_USER (userid, userpassword,homedirectory, enableflag, writepermission, idletime,
uploadrate,downloadrate,maxloginnumber,maxloginperip)
VALUES (:new.terminalseril, 'E10ADC3949BA59ABBE56E057F20F883E', concat('/usr/local/ftproot/',:new.terminalseril), 1, 1, 0, 20480, 20480, 5, 5);
-- Errors handling
exception
when integrity_error then
raise_application_error(errno, errmsg);
end;
注意,如果要对在不同表空间的其他表进行插入操作,则需要具备有足够的权限,否则触发器编译会不通过。
另外下面是一个常有的sql语句,就是从当期的某个表选择数据插入另外一个表的常用方式:
insert into ftp_user(userid,userpassword,homedirectory,enableflag,writepermission,idletime,uploadrate,downloadrate,maxloginnumber,maxloginperip)
select distinct t.seril,'E10ADC3949BA59ABBE56E057F20F883E',
'/usr/local/ftproot/'||t.seril,
1,1,0,20480,20480,0,0 from terminal t
即将terminal表中的部分数据内容插入ftp_user用户之中。