??xml version="1.0" encoding="utf-8" standalone="yes"?>日韩午夜影院,一区二区成人国产精品,色姑娘综合网http://www.aygfsteel.com/junky/category/15022.htmlzh-cnTue, 19 Jun 2007 08:58:11 GMTTue, 19 Jun 2007 08:58:11 GMT60Oracle触发?/title><link>http://www.aygfsteel.com/junky/archive/2007/06/19/125048.html</link><dc:creator>junky</dc:creator><author>junky</author><pubDate>Tue, 19 Jun 2007 01:37:00 GMT</pubDate><guid>http://www.aygfsteel.com/junky/archive/2007/06/19/125048.html</guid><wfw:comment>http://www.aygfsteel.com/junky/comments/125048.html</wfw:comment><comments>http://www.aygfsteel.com/junky/archive/2007/06/19/125048.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/junky/comments/commentRss/125048.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/junky/services/trackbacks/125048.html</trackback:ping><description><![CDATA[<table cellSpacing=0 cellPadding=0 width="100%" border=0> <tbody> <tr> <td> <hr> <p>触发器的概念和类?br>  数据库触发器Qdatabase triggersQ是响应插入、更新或删除{数据库事g而执行的q程。它定义了当一些数据库相关事g发生时应采取的动作。可用于理复杂的完整性约束,或监控对表的修改Q或通知其它E序Q表已发生修攏V它的类型有Q语句触发器,以及行触发器,前者可以在语句执行前或执行后被触发。后者在每个触发语句影响的行触发一ơ。还有before和after触发的命令。在insert,update,和delete之前或之后执行,引用新旧D行处理。如果需通过触发器设定插入行中的某列|则ؓ了访?#8220;?new)”|需使用一个触发器before insertQ用after insert则不行。Instead of 触发器命令,使用它告诉oracle应执行什么操作。以上四U大cd?4U小c(略)。各U触发器的执行顺序如下: <br>  ⑴   如果有,最先执行语句before触发器?<br>  c  每个insertQdelete,update影响的行Q?<br>   ①  如果有,最先执行行Ubefore <br>   ②  执行行的delete或update <br>   ③  如果?执行行after触发?<br>  ⑶   如果?执行语句Uafter触发?<br>  <br>  1、用数据库触发器管理数据冗余?<br>  Z数据分析和制作报表的需?用户在数据模型中加入了冗余数据,应用触发器,以保证数据的完整性?<br>  冗余数据可以用规定的 for each row选项的before update触发器进行管理。update 命o可放在触发器中对所有需要更新的冗余数据q行更新,如客戯和订单表,订单表包括客L订单和客戯的冗余信?客户?customer)的表l构:客户?cu_no)、客户名(cu_name)、客户地址(cu_address)。订单表(order)的表l构:订单?or_no),客户?or_no)Q客户名Qcu_nameQ,客户地址Qcu_addressQ?当客户基表中的数据被更新时更新订单中的冗余列。语法如下: </p> <p> create or replace trigger bj_customer <br> before update on customer <br> for each row <br> begin <br>  update order set <br>  cu_no=:new.cu_no,<br>  cu_name=:new.cu_name,<br>  cu_address=:new.cu_addess,<br>  where cu_no=:old.cu_no;<br> end; <br>  <br>  2、用触发器完成数据复?<br>  如果需求非常有限,可以用数据触发器从一个数据库中向另一个数据库复制数据Q如果数据复刉求仅与数据的插入有关Q当一条记录插入到一个数据库中的某个中时Q用戯希望把这条记录插入到一个远E数据库中,需用create database link语句创徏一条到q程数据库的q接Q一旦创Z一条数据库q接后,可以在上创Z个after insert触发器,以把每一条记录插入到q程数据库中?<br>  <br>  Q?Q在脚本中创建数据库q接Qdatabase linkQbj_ysd_remote作ؓ数据库基表,Bj_ysd_local代表本地数据库上的源?<br>  <br> Creat database link remote(q接? <br> Connect to bj(帐户) indentified by bj(密码) <br> Using ':2'; <br>  <br>  Q?Q复制记?<br>  <br> create or replace trigger trig_ysd<br> after insert on bj_ysd_local <br> for each row <br> begin <br>  insert into <a href="mailto:bj_ysd_remote@dblink"><u><font color=#0000ff>bj_ysd_remote@dblink</font></u></a> remote <br>  value(:new.x1,:new.x2,……)/Qx1.x2代表字段名*Q?<br> end; <br>  <br>  Q?Q删除记?<br>  <br> create or replace trigger trig_ysd_del <br> after delete on bj_ysd_local <br> for each row <br> begin <br>  delete from <a href="mailto:bj_ysd_remote@dblink"><u><font color=#0000ff>bj_ysd_remote@dblink</font></u></a> remote <br>  where x1=:old.x1 <br> end; <br>  <br>  3、用数据库触发器完成瀑布式删除操?<br>  在某些情况下Q当要删除一条记录时Q该记录是与外键有关的另外一张基表上的记录时Q这个删除操作必d模型中进行传递,否则会出现大量的冗长数据Q仍以cumstomer 和orderZQ当从customer中删除一个客hQorder中所有相兌录也应当删除?</p> <p> Create or replace trigger trig_cust <br> Before delete on customer <br> For each row <br> Begin <br>  Delete from order <br>  Where cu_no=old.cu_no;<br> End; <br>  <br>  4、用触发器完成动态数据的操作 <br>  在涉及如何实现动态库存的问题Ӟ可用触发器解冟뀂仓库有验收、出库、调拨、报废、退料、让售等q些数据必须与以前的库存相加减,才能完成动态库存操作。本文仅以验收单触发器ؓ例,其它的结构雷同。它们涉及到两个Qbi­_ysd(验收?QBj_kcb(当前库存?Q前者的表结构(rq(日期)Qysdh(验收单号)Q?bjbm(备g~码)Qyssl(验收数量)Qysdj(验收单h)Q,后者的表结构ؓQbjbmQ备件编码),dqkclQ当前库存量Q?dqkcjeQ当前库存金额)Q触发器如下Q?<br>  <br> create or replace trigger trig_ysd <br> after insert or update or delete on bj_ysd <br> for each row <br>  declare rq1 varchar2(8);rq2 varchar2(8); <br>  /*限于幅Qyssl1,yssl2,ysdj1,ysdj2,bjbm1,bjbm2,ii声明?/ <br>  if inserting or updating then <br>   rq1:=:new.rq;bjbm1:=:new.bjbm;yssl1:=:new.yssl; <br>   ysdj1:=:new.ysdj; <br>  <br>   select count(*) into ii from bj_dqkcb <br>   where bjbm=bjbm1; <br>  <br>   if ii=0 then <br>    insert into bj_dqkcb(bjbm,dqkcl,dqkcje) <br>    value(bjbm1,yssl1,ysdj1); <br>   else <br>    update bj_dqkcb <br>    set dqkcl=dqkcl+yssl1; <br>       dqkcje=dqkcje+yssl1*ysdj1; <br>   end if <br>  end if <br>  <br>  if deleting or updating then <br>   rq2:=:old.rq;<br>   bjbm2:=:old.bjbm;<br>   yssl2:=:old.yssl; <br>   ysdj2:=:old.ysdj; <br>   update bj_dqkcb <br>   set dqkcb=dqkcl-yssl2; <br>    dqkcje=dqkcje-yssl2*ysdj2 <br>  end if; <br> end ; <br>  <br>  5、结束语 <br>  数据库触发器在数据库开发有很广泛的应用Q但l验表明Q用过多的触发器将降低整个数据库的性能。如果数据库触发器写得不好,它会很快破坏数据库的性能Q因此,在适当的时候用恰当的触发器显得非帔R要?</p> </td> </tr> </tbody> </table> <img src ="http://www.aygfsteel.com/junky/aggbug/125048.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/junky/" target="_blank">junky</a> 2007-06-19 09:37 <a href="http://www.aygfsteel.com/junky/archive/2007/06/19/125048.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Oracle数据导入导出imp/exp命ohttp://www.aygfsteel.com/junky/archive/2006/09/09/68630.htmljunkyjunkyFri, 08 Sep 2006 16:43:00 GMThttp://www.aygfsteel.com/junky/archive/2006/09/09/68630.htmlhttp://www.aygfsteel.com/junky/comments/68630.htmlhttp://www.aygfsteel.com/junky/archive/2006/09/09/68630.html#Feedback0http://www.aygfsteel.com/junky/comments/commentRss/68630.htmlhttp://www.aygfsteel.com/junky/services/trackbacks/68630.html 
执行环境Q可以在SQLPLUS.EXE或者DOSQ命令行Q中执行Q?br /> DOS中可以执行时׃ 在oracle 8i 中?安装目录\ora81\BIN被设|ؓ全局路径Q?br /> 该目录下有EXP.EXE与IMP.EXE文g被用来执行导入导出?br /> oracle用java~写QSQLPLUS.EXE、EXP.EXE、IMP.EXEq两个文件有可能是被包装后的cL件?br /> SQLPLUS.EXE调用EXP.EXE、IMP.EXE所包裹的类Q完成导入导出功能?br /> 
下面介绍的是导入导出的实例?br />数据导出Q?br /> 1 数据库TEST完全导出,用户名system 密码manager 导出到D:\daochu.dmp?br />   exp system/manager@TEST file=d:\daochu.dmp full=y
 2 数据库中system用户与sys用户的表导出
   exp system/manager@TEST file=d:\daochu.dmp owner=(system,sys)
 3 数据库中的表inner_notify、notify_staff_relat导出
    exp aichannel/aichannel@TESTDB2 file= d:\data\newsmgnt.dmp tables=(inner_notify,notify_staff_relat)

 4 数据库中的表table1中的字段filed1?00"打头的数据导?br />   exp system/manager@TEST file=d:\daochu.dmp tables=(table1) query=\" where filed1 like '00%'\"
 
  上面是常用的导出Q对于压~,既用winzip把dmp文g可以很好的压~?br />  也可以在上面命o后面 加上 compress=y 来实现?/p>

数据的导?br /> 1 D:\daochu.dmp 中的数据导入 TEST数据库中?br />   imp system/manager@TEST  file=d:\daochu.dmp
   imp aichannel/aichannel@HUST full=y  file=file= d:\data\newsmgnt.dmp ignore=y
   上面可能有点问题Q因为有的表已经存在Q然后它报错,对该表就不进行导入?br />   在后面加?ignore=y 可以了?br /> 2 d:\daochu.dmp中的表table1 导入
 imp system/manager@TEST  file=d:\daochu.dmp  tables=(table1)
 
 基本上上面的导入导出够用了。不情况要先是表d删除Q然后导入?br /> 
注意Q?br /> 操作者要有够的权限Q权限不够它会提C?br /> 数据库时可以q上的。可以用tnsping TEST 来获得数据库TEST能否q上?/p>

附录一Q?br /> l用户增加导入数据权限的操作
 W一,启动sql*puls
 W二Q以system/manager登陆
 W三Qcreate user 用户?IDENTIFIED BY 密码 Q如果已l创用户Q这步可以省略)
 W四QGRANT CREATE USER,DROP USER,ALTER USER ,CREATE ANY VIEW ,
   DROP ANY VIEW,EXP_FULL_DATABASE,IMP_FULL_DATABASE,
      DBA,CONNECT,RESOURCE,CREATE SESSION  TO 用户名字
 W五, q行-cmd-q入dmp文g所在的目录,
      imp userid=system/manager full=y file=*.dmp
      或?imp userid=system/manager full=y file=filename.dmp

 执行CZ:
 F:\Work\Oracle_Data\backup>imp userid=test/test full=y file=inner_notify.dmp

屏幕昄
Import: Release 8.1.7.0.0 - Production on 星期?2?16 16:50:05 2006
(c) Copyright 2000 Oracle Corporation.  All rights reserved.

q接? Oracle8i Enterprise Edition Release 8.1.7.0.0 - Production
With the Partitioning option
JServer Release 8.1.7.0.0 - Production

l由常规路径导出由EXPORT:V08.01.07创徏的文?br />已经完成ZHS16GBK字符集和ZHS16GBK NCHAR 字符集中的导?br />导出服务器用UTF8 NCHAR 字符?(可能的ncharset转换)
. 正在AICHANNEL的对象导入到 AICHANNEL
. . 正在导入表                ?"INNER_NOTIFY"          4行被导入
准备启用U束条g...
成功l止导入Q但出现警告?/p>


附录二:
 Oracle 不允许直接改变表的拥有? 利用Export/Import可以辑ֈq一目的.
  先徏立import9.par,
  然后Q用时命o如下Qimp parfile=/filepath/import9.par
  ?import9.par 内容如下Q?br />        FROMUSER=TGPMS       
        TOUSER=TGPMS2     Q注Q把表的拥有者由FROMUSER改ؓTOUSERQFROMUSER和TOUSER的用户可以不同)          
        ROWS=Y
        INDEXES=Y
        GRANTS=Y
        CONSTRAINTS=Y
        BUFFER=409600
        file==/backup/ctgpc_20030623.dmp
        log==/backup/import_20030623.log



junky 2006-09-09 00:43 发表评论
]]>
վ֩ģ壺 ϰ| | | մ| ɽ| | | | ˮ| | ϵ| | ɽ| ԭ| ƽ| | | ʯ̨| | Ҷ| Ʊ| ۳| | | | | | | | ޶| | | Ͷ| | | Ű| | Զ| »| | |