很久沒有玩這些玩意了,順記錄下WJ兄編寫的觸發(fā)器,大致實現(xiàn)的功能就是:當用戶網(wǎng)terminal表插入一條記錄時候順便網(wǎng)ftp_user表插入一條記錄,而后者表中
需要用到terminal表中的部分字段內(nèi)容比如terminalseril字段,其中:new.terminalseril表示就是terminal表中新插入的這條記錄的terminalseril值。現(xiàn)在對關鍵字做一下說明 :NEW 和:OLD使用方法和意義,new 只出現(xiàn)在insert和update時,old只出現(xiàn)在update和delete時。在insert時new表示新插入的行數(shù)據(jù),update時new表示要替換的新數(shù)據(jù)、old表示要被更改的原來的數(shù)據(jù)行,delete時old表示要被刪除的數(shù)據(jù)。觸發(fā)器類型大致分為:事前觸發(fā)和事后觸發(fā),具體可以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;

注意,如果要對在不同表空間的其他表進行插入操作,則需要具備有足夠的權限,否則觸發(fā)器編譯會不通過。
另外下面是一個常有的sql語句,就是從當期的某個表選擇數(shù)據(jù)插入另外一個表的常用方式:
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表中的部分數(shù)據(jù)內(nèi)容插入ftp_user用戶之中。