Dict.CN 在线词典, 英语学习, 在线翻译

都市淘沙者

荔枝FM Everyone can be host

统计

留言簿(23)

积分与排名

优秀学习网站

友情连接

阅读排行榜

评论排行榜

Oracle触发器及sql使用技巧

很久没有玩这些玩意了,顺记录下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), 110204802048055);
--  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用户之中。

posted on 2010-01-29 20:07 都市淘沙者 阅读(382) 评论(0)  编辑  收藏 所属分类: Oracle/Mysql/Postgres/


只有注册用户登录后才能发表评论。


网站导航: