关于Oracle的触发器? ( 积分: 30 )

  • 主题发起人 主题发起人 otqsoft
  • 开始时间 开始时间
O

otqsoft

Unregistered / Unconfirmed
GUEST, unregistred user!
create&nbsp;or&nbsp;replace&nbsp;trigger&nbsp;tri_base_ware&nbsp;<br>&nbsp;&nbsp;after&nbsp;insert&nbsp;or&nbsp;delete&nbsp;or&nbsp;update&nbsp;on&nbsp;base_ware&nbsp;for&nbsp;each&nbsp;row<br>declare<br>&nbsp;&nbsp;&nbsp;--&nbsp;insert&nbsp;状态&nbsp;&nbsp;[0]<br>&nbsp;&nbsp;&nbsp;tSql&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;varchar2(500):=&nbsp;'';<br>&nbsp;&nbsp;&nbsp;Area1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;varchar2(10)&nbsp;:=&nbsp;'';<br>&nbsp;&nbsp;&nbsp;Area2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;varchar2(10)&nbsp;:=&nbsp;'';&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;arows&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;varchar2(10)&nbsp;:=&nbsp;'';<br>&nbsp;&nbsp;&nbsp;statu&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;varchar2(2)&nbsp;&nbsp;:=&nbsp;'';<br>&nbsp;&nbsp;&nbsp;trows&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;integer(10)&nbsp;&nbsp;:=&nbsp;0;<br>&nbsp;&nbsp;&nbsp;ticket&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;varchar2(20)&nbsp;:=&nbsp;'';<br>&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;cursor&nbsp;c_base&nbsp;is<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;select&nbsp;lower(table_name)&nbsp;as&nbsp;table_name,lower(column_name)&nbsp;as&nbsp;column_name,lower(data_type)&nbsp;as&nbsp;data_type<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;from&nbsp;cols&nbsp;where&nbsp;lower(table_name)='base_ware';<br>begin<br>&nbsp;&nbsp;&nbsp;select&nbsp;tvalue&nbsp;into&nbsp;Area1&nbsp;from&nbsp;send_area&nbsp;where&nbsp;id='01';<br>&nbsp;&nbsp;&nbsp;select&nbsp;tvalue&nbsp;into&nbsp;Area1&nbsp;from&nbsp;send_area&nbsp;where&nbsp;id='02';<br>&nbsp;&nbsp;&nbsp;select&nbsp;count(*)&nbsp;into&nbsp;trows&nbsp;from&nbsp;send_data;<br>&nbsp;&nbsp;&nbsp;if&nbsp;trows&nbsp;=&nbsp;0&nbsp;then<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;trows&nbsp;:=&nbsp;1;<br>&nbsp;&nbsp;&nbsp;else<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;select&nbsp;max(substr(ticket_no,15,6))&nbsp;as&nbsp;tick&nbsp;into&nbsp;trows&nbsp;from&nbsp;send_data;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;trows&nbsp;:=&nbsp;trows&nbsp;+&nbsp;1;<br>&nbsp;&nbsp;&nbsp;end&nbsp;if;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;select&nbsp;to_char(sysdate,'yyyymmddhh24miss')&nbsp;as&nbsp;tcik&nbsp;into&nbsp;ticket&nbsp;from&nbsp;dual;<br>&nbsp;&nbsp;&nbsp;arows&nbsp;:=&nbsp;to_char(trows);<br>&nbsp;&nbsp;&nbsp;if&nbsp;length(arows)&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;1&nbsp;then&nbsp;arows&nbsp;:=&nbsp;'00000'&nbsp;+&nbsp;arows;<br>&nbsp;&nbsp;&nbsp;elsif&nbsp;length(arows)&nbsp;=&nbsp;2&nbsp;then&nbsp;arows&nbsp;:=&nbsp;'0000'&nbsp;+&nbsp;arows;<br>&nbsp;&nbsp;&nbsp;elsif&nbsp;length(arows)&nbsp;=&nbsp;3&nbsp;then&nbsp;arows&nbsp;:=&nbsp;'000'&nbsp;+&nbsp;arows;<br>&nbsp;&nbsp;&nbsp;elsif&nbsp;length(arows)&nbsp;=&nbsp;4&nbsp;then&nbsp;arows&nbsp;:=&nbsp;'00'&nbsp;+&nbsp;arows;<br>&nbsp;&nbsp;&nbsp;elsif&nbsp;length(arows)&nbsp;=&nbsp;5&nbsp;then&nbsp;arows&nbsp;:=&nbsp;'0'&nbsp;+&nbsp;arows;<br>&nbsp;&nbsp;&nbsp;end&nbsp;if;<br>&nbsp;&nbsp;&nbsp;ticket&nbsp;:=&nbsp;ticket||arows;<br>&nbsp;&nbsp;&nbsp;if&nbsp;inserting&nbsp;then&nbsp;&nbsp;&nbsp;statu&nbsp;:=&nbsp;'0';<br>&nbsp;&nbsp;&nbsp;elsif&nbsp;updating&nbsp;then&nbsp;statu&nbsp;:=&nbsp;'1';<br>&nbsp;&nbsp;&nbsp;elsif&nbsp;deleting&nbsp;then&nbsp;statu&nbsp;:=&nbsp;'2';&nbsp;<br>&nbsp;&nbsp;&nbsp;end&nbsp;if;<br>&nbsp;&nbsp;&nbsp;for&nbsp;r_add&nbsp;in&nbsp;c_base&nbsp;loop<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tSql&nbsp;:=&nbsp;'insert&nbsp;into&nbsp;send_data(ticket_no,t_name,t_field,t_type,t_value,opt_statu,opt_while,opt_server)&nbsp;values('||<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ticket,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r_add.table_name,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r_add.column_name,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r_add.data_type,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:new.r_add.column_name,&nbsp;--&nbsp;此处字段名能不能用变量代替<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;statu,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'',<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Area1);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;execute&nbsp;immediate&nbsp;tsql;<br>&nbsp;&nbsp;&nbsp;end&nbsp;loop;<br>&nbsp;&nbsp;&nbsp;commit;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>exception&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;when&nbsp;others&nbsp;then&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rollback;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;raise_application_error(-20800,'触发器向发送表发送数据错误!');&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>end&nbsp;tri_base_ware;<br>上面注释部分的字段字能不能用变量代替?哪位朋友若知道,告诉俺一声吧?帮帮忙嘛...
 
用DBMS_SQL包,执行动态SQL
 
接受答案了.
 
后退
顶部