??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲欧美成人一区二区三区,亚洲综合激情视频,亚洲天堂2016http://m.tkk7.com/kemi/category/8725.html壁立千仞Q无Ʋ则?/description>zh-cnFri, 16 Nov 2007 01:36:44 GMTFri, 16 Nov 2007 01:36:44 GMT60oracle 基本q接操作囄 Q{Q?/title><link>http://m.tkk7.com/kemi/archive/2007/11/15/160689.html</link><dc:creator>Kimi</dc:creator><author>Kimi</author><pubDate>Thu, 15 Nov 2007 01:54:00 GMT</pubDate><guid>http://m.tkk7.com/kemi/archive/2007/11/15/160689.html</guid><wfw:comment>http://m.tkk7.com/kemi/comments/160689.html</wfw:comment><comments>http://m.tkk7.com/kemi/archive/2007/11/15/160689.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.tkk7.com/kemi/comments/commentRss/160689.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/kemi/services/trackbacks/160689.html</trackback:ping><description><![CDATA[ <div style="TEXT-INDENT: 24pt; LINE-HEIGHT: 150%"> <span style="LINE-HEIGHT: 150%">q段旉很多|友提出监听配置相关问题Q客L?Client)无法q接服务器端(Server)。本文现对监听配|作一单介l,q提Z些客L端无法连接服务器端的解决思\Q愿对广大网友与读者有一些帮助?/span> </div> <div style="LINE-HEIGHT: 150%"> </div> <div style="LINE-HEIGHT: 150%"> <strong> <span style="LINE-HEIGHT: 150%">一?/span> </strong> <strong> <span style="LINE-HEIGHT: 150%">监听?LISTENER)</span> </strong> </div> <div style="LINE-HEIGHT: 150%"> <span style="LINE-HEIGHT: 150%">  监听器是OracleZ服务器端的一U网l服务,主要用于监听客户端向数据库服务器端提出的q接h。既然是Z服务器端的服务,那么它也只存在于数据库服务器端,q行监听器的讄也是在数据库服务器端完成的?/span> </div> <div style="LINE-HEIGHT: 150%"> </div> <div style="LINE-HEIGHT: 150%"> <strong> <span style="LINE-HEIGHT: 150%">二?/span> </strong> <strong> <span style="LINE-HEIGHT: 150%">本地服务?Tnsname)</span> </strong> </div> <div style="LINE-HEIGHT: 150%"> <span style="LINE-HEIGHT: 150%">  Oracle</span> <span style="LINE-HEIGHT: 150%">客户端与服务器端的连接是通过客户端发接请求,由服务器端监听器对客Lq接hq行合法查,如果q接h有效Q则q行q接Q否则拒l该q接?/span> </div> <div style="LINE-HEIGHT: 150%"> <span style="LINE-HEIGHT: 150%">本地服务名是Oracle客户端网l配|的一U,另外q有Oracle名字服务?Oracle Names Server){。Oracle常用的客L配置是采用的本地服务名Q本文中介绍的也主要是基于本地服务名的配|?/span> </div> <div style="LINE-HEIGHT: 150%"> </div> <div style="LINE-HEIGHT: 150%"> <strong> <span style="LINE-HEIGHT: 150%">三?/span> </strong> <strong> <span style="LINE-HEIGHT: 150%">Oracle</span> </strong> <strong> <span style="LINE-HEIGHT: 150%">|络q接配置Ҏ(gu)</span> </strong> </div> <div style="LINE-HEIGHT: 150%"> <span style="LINE-HEIGHT: 150%">  ?|Oracle服务器端与客L都可以在其自带的囑Ş化Oracle|络理?Oracle Net Manager)里完成(强烈在这个图形化的工具下完成Oracle服务端或客户端的配置Q。在Windows下,点击“开?E序/Oracle - OraHome92/Configuration and Migration Tools/Net Manager”启动Oracle|络理器工P在Linux/Unix下,利用netmgr命o来启动图形化Oracle|络理器,如:</span> </div> <div style="LINE-HEIGHT: 150%"> <span style="LINE-HEIGHT: 150%">$ netmgr</span> </div> <div style="LINE-HEIGHT: 150%"> <span style="LINE-HEIGHT: 150%">Windows</span> <span style="LINE-HEIGHT: 150%">下启动Net Manager囑ŞH口如下囄Q?/span> </div> <div style="LINE-HEIGHT: 150%"> </div> <div style="LINE-HEIGHT: 150%"> <span style="LINE-HEIGHT: 150%"> <img alt="" src="http://oracle.chinaitlab.com/UploadFiles_7269/200705/20070518143457473.png" /> </span> </div> <div style="LINE-HEIGHT: 150%"> <span style="LINE-HEIGHT: 150%">                                                              </span> <span style="LINE-HEIGHT: 150%">?一)</span> </div> <div style="LINE-HEIGHT: 150%"> </div> <div style="LINE-HEIGHT: 150%"> <strong> <span style="LINE-HEIGHT: 150%">1、?/span> <span style="LINE-HEIGHT: 150%">Oracle</span> <span style="LINE-HEIGHT: 150%">监听器配|?LISTENER)</span> </strong> </div> <div style="LINE-HEIGHT: 150%"> <span style="LINE-HEIGHT: 150%">  ??一)C,选中树Ş目录中监听程序项Q再点击左上侧?”按钮添加监听程序,点击监听E序目录Q默认新加的监听器名U是LISTENER(该名UC可以 ׃Q意合法字W命?。选中该名Uͼ选中H口右侧栏下拉选项中的“监听位|”,点击d地址按钮。在出现的网l地址栏的协议下拉选项中选中 “TCP/IP”,L文本框中输入L名称或IP地址(如果L即用作服务端也作为客LQ输入两之一均有效;如果L作ؓ服务端ƈ需要通过|络q?接,输入IP地址)Q端口文本框中输入数字端口,默认?521Q也可以自定义Q意有效数字端口。配|好的监听位|如下图C:</span> </div> <div style="LINE-HEIGHT: 150%"> </div> <div style="LINE-HEIGHT: 150%"> <span style="LINE-HEIGHT: 150%"> <img alt="" src="http://oracle.chinaitlab.com/UploadFiles_7269/200705/20070518143458390.png" /> </span> </div> <div style="LINE-HEIGHT: 150%"> <span style="LINE-HEIGHT: 150%">                                                               </span> <span style="LINE-HEIGHT: 150%">??</span> </div> <div style="LINE-HEIGHT: 150%">  <div style="LINE-HEIGHT: 150%"><span style="LINE-HEIGHT: 150%">  ?中窗口右侧栏下拉选项中的“数据库服务”,点击d数据库按钮。在出现的数据库栏中输入全局数据库名Q如myoracle。注意这里的全局数据库名与数?库SID有所区别Q全局数据库名实际通过域名来控制在同一|段内数据库全局命名的唯一性,如Windows下的域名控制器,如这里可以输?myoracle.192.168.1.5。Oracleȝ录可以不填写Q输入SIDQ如myoracle。完整的数据库服务配|如下图C:</span></div><br clear="all" /><div style="LINE-HEIGHT: 150%"><span style="LINE-HEIGHT: 150%"><img alt="" src="http://oracle.chinaitlab.com/UploadFiles_7269/200705/20070518143458958.png" /></span></div><div style="TEXT-INDENT: 220.5pt; LINE-HEIGHT: 150%"><span style="LINE-HEIGHT: 150%">          ??</span></div><div style="TEXT-INDENT: 215.25pt; LINE-HEIGHT: 150%"> </div><div style="LINE-HEIGHT: 150%"><span style="LINE-HEIGHT: 150%">  ?存以上配|,默认卛_在Oracle安装目录下找到监听配|文?(Windows下如D:oracleora92networkadminlistener.oraQLinux/Unix? ORACLE_HOME/network/admin/listerer.ora)。至此,Oracle服务端监听器配置已经完成?/span></div><div style="LINE-HEIGHT: 150%"> </div><div style="LINE-HEIGHT: 150%"><strong><span style="LINE-HEIGHT: 150%">2、?/span><span style="LINE-HEIGHT: 150%">本地服务名配|?Tnsnames)</span></strong></div><div style="LINE-HEIGHT: 150%"><span style="LINE-HEIGHT: 150%">  ?地服务名是基于Oracle客户端的|络配置Q所以,如果客户端需要连接数据库服务器进行操作,则需要配|该客户端,其依附对象可以是L一台欲q接数据 库服务器q行操作?a class="none" title="pc" target="_blank" rel="external"><font color="#0066cc">pc</font></a>机,也可以是数据库服务器自n。如前面所介绍Q可以利用Oracle自带的图形化理工具Net Manager来完成Oracle客户端的配置。选中如图(一)中的服务命名Q再点击左上侧?”按钮,弹出如下囄对话框:</span></div><div style="LINE-HEIGHT: 150%"> </div><div style="LINE-HEIGHT: 150%"><span style="LINE-HEIGHT: 150%"><img alt="" src="http://oracle.chinaitlab.com/UploadFiles_7269/200705/20070518143458176.png" /></span></div><div style="MARGIN-LEFT: 45.05pt; TEXT-INDENT: 165.4pt; LINE-HEIGHT: 150%"><span style="LINE-HEIGHT: 150%">                      ??</span></div><div style="LINE-HEIGHT: 150%" align="center"> </div><div style="LINE-HEIGHT: 150%"><span style="LINE-HEIGHT: 150%">  输入Net服务名,如myoracleQ点M一步,q入下图C对话框Q?/span></div><div style="LINE-HEIGHT: 150%"> </div><div style="LINE-HEIGHT: 150%"><span style="LINE-HEIGHT: 150%"><img alt="" src="http://oracle.chinaitlab.com/UploadFiles_7269/200705/20070518143459429.png" /></span></div><div style="LINE-HEIGHT: 150%" align="center"><span style="LINE-HEIGHT: 150%">                ??</span></div><div style="LINE-HEIGHT: 150%" align="center"> </div><div style="LINE-HEIGHT: 150%"><span style="LINE-HEIGHT: 150%"></span> 选中TCP/IP(Internet协议)Q点M一步,如下囄Q?br clear="all" /><div style="LINE-HEIGHT: 150%"><span style="LINE-HEIGHT: 150%"><img alt="" src="http://oracle.chinaitlab.com/UploadFiles_7269/200705/20070518143459723.png" /></span></div><div style="LINE-HEIGHT: 150%" align="center"><span style="LINE-HEIGHT: 150%">                ??</span></div><div style="LINE-HEIGHT: 150%" align="center"> </div><div style="LINE-HEIGHT: 150%"><span style="LINE-HEIGHT: 150%">  输入L名与端口受注意这里的L名与端口号必M数据库服务器端监听器配置的主机名和端口号相同。点M一步,如下囄Q?/span></div><div style="LINE-HEIGHT: 150%"> </div><div style="LINE-HEIGHT: 150%"><span style="LINE-HEIGHT: 150%"><img alt="" src="http://oracle.chinaitlab.com/UploadFiles_7269/200705/20070518143459417.png" /></span></div><div style="MARGIN-LEFT: 45.05pt; TEXT-INDENT: 165.4pt; LINE-HEIGHT: 150%"><span style="LINE-HEIGHT: 150%">                     ??</span></div><div style="LINE-HEIGHT: 150%" align="center"> </div><div style="LINE-HEIGHT: 150%"><span style="LINE-HEIGHT: 150%">  ??Oracle8i或更高版?服务名,输入服务名。这里的服务名实际上是数据库服务器端监听器配置中的全局数据库名Q前者与后者必ȝ同。连接类?通常选专用服务器Q这要视数据库服务器的配|而定Q如果配|的׃n数据库服务器Q这里的q接cdp选共享服务器Q否则徏议选专用服务器(关于专用服务?的介l请参阅相关文档)。配|好后点M一步,如下囄Q?/span></div><div style="LINE-HEIGHT: 150%"> </div><div style="LINE-HEIGHT: 150%"><span style="LINE-HEIGHT: 150%"><img alt="" src="http://oracle.chinaitlab.com/UploadFiles_7269/200705/20070518143459414.png" /></span></div><div style="LINE-HEIGHT: 150%" align="center"><span style="LINE-HEIGHT: 150%">                ??</span></div><div style="LINE-HEIGHT: 150%" align="center"> </div><div style="LINE-HEIGHT: 150%"><span style="LINE-HEIGHT: 150%"></span>  ?果数据库服务器端相关服务启动了,可以点击试按钮q行q接试。Oracle默认是通过scott/tiger用户q行试q接Q由于scott用户?Oracle自带的示例用P对于正式的业务数据库或专业测试数据库可能没有配置q个用户Q所以需要更Ҏ(gu)有效的用L录才可能试成功。如果这里测试连 接不成功Q也不要紧,先点完成按钮l束配置? <div style="LINE-HEIGHT: 150%"><span style="LINE-HEIGHT: 150%">  ?到Oracle|络理?Oracle Net Manager)ȝ口,保存配置Q默认即可在Oracle安装目录下找到本地服务名配置文g (Windows下如D:oracleora92networkadmintnsnames.oraQLinux/Unix? ORACLE_HOME/network/admin/ tnsnames.ora)。配|完成的本地服务名如下图C:</span></div><br clear="all" /><div style="LINE-HEIGHT: 150%"><span style="LINE-HEIGHT: 150%"><img alt="" src="http://oracle.chinaitlab.com/UploadFiles_7269/200705/20070518143500206.png" /></span></div><div style="MARGIN-LEFT: 45.05pt; TEXT-INDENT: 170.65pt; LINE-HEIGHT: 150%"><span style="LINE-HEIGHT: 150%">                  ??</span></div><div style="LINE-HEIGHT: 150%" align="center"> </div><div style="LINE-HEIGHT: 150%"><span style="LINE-HEIGHT: 150%">  树Ş目录下的服务命名可以通过~辑菜单里的重命名菜单更Ҏ(gu)L合法字符l成的服务名Uͼ注意服务名称前不能有I格字符Q否则可能无法连接数据库服务器?/span></div><div style="LINE-HEIGHT: 150%"> </div><div style="LINE-HEIGHT: 150%"><strong><span style="LINE-HEIGHT: 150%">3、?/span><span style="LINE-HEIGHT: 150%">q接数据库服务器</span></strong></div><div style="LINE-HEIGHT: 150%"><strong><span style="LINE-HEIGHT: 150%">(1)<span style="FONT: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal">   </span></span><span style="LINE-HEIGHT: 150%">启动服务器端监听器与数据库服?/span></strong></div><div style="LINE-HEIGHT: 150%"><span style="LINE-HEIGHT: 150%">Linux/Unix</span><span style="LINE-HEIGHT: 150%">下,启动监听器:</span></div><div style="LINE-HEIGHT: 150%"><span style="LINE-HEIGHT: 150%">$ lsnrctl start                     </span></div><div style="LINE-HEIGHT: 150%"><span style="LINE-HEIGHT: 150%">关闭监听器:</span></div><div style="LINE-HEIGHT: 150%"><span style="LINE-HEIGHT: 150%">$ lsnrctl stop</span></div><div style="LINE-HEIGHT: 150%"><span style="LINE-HEIGHT: 150%">查看监听状态:</span></div><div style="LINE-HEIGHT: 150%"><span style="LINE-HEIGHT: 150%">$ lsnrctl status</span></div><div style="LINE-HEIGHT: 150%"><span style="LINE-HEIGHT: 150%">启动数据库:</span></div><div style="LINE-HEIGHT: 150%"><span style="LINE-HEIGHT: 150%">$ sqlplus /nolog</span></div><div style="MARGIN-LEFT: 226.5pt; TEXT-INDENT: -147pt; LINE-HEIGHT: 150%"><span style="LINE-HEIGHT: 150%">SQL>conn sys@myoracle as sysdba   --</span><span style="LINE-HEIGHT: 150%">q里的myoracle是前面配|的客户端本地服务名</span></div><div style="LINE-HEIGHT: 150%"><span style="LINE-HEIGHT: 150%">?/span></div><div style="LINE-HEIGHT: 150%"><span style="LINE-HEIGHT: 150%">SQL>conn / as sysdba</span></div><div style="LINE-HEIGHT: 150%"><span style="LINE-HEIGHT: 150%">SQL>startup</span></div><div style="LINE-HEIGHT: 150%"><span style="LINE-HEIGHT: 150%">Windows</span><span style="LINE-HEIGHT: 150%">下,启动监听器:</span></div><div style="LINE-HEIGHT: 150%"><span style="LINE-HEIGHT: 150%">C:lsnrctl start</span></div><div style="LINE-HEIGHT: 150%"><span style="LINE-HEIGHT: 150%">启动Oracle实例服务Q?/span></div><div style="LINE-HEIGHT: 150%"><span style="LINE-HEIGHT: 150%">C:oradim ?a class="none" title="cs" rel="external">cstartup –sid myoracle   </span></div><div style="LINE-HEIGHT: 150%"><span style="LINE-HEIGHT: 150%">关闭Oracle实例服务Q?/span></div><div style="LINE-HEIGHT: 150%"><span style="LINE-HEIGHT: 150%">C:oradim –shutdown –sid myoracle</span></div><div style="LINE-HEIGHT: 150%"><span style="LINE-HEIGHT: 150%">  以上服务必须同时启动Q客L才能q接数据库。由于默认配|的监听器名U是ListenerQ上q命令可以正常启动监听器Q如果监听器名称是其它名Uͼ如aListenerQ则需要用下列方式才能启动Q?/span></div><div style="MARGIN-LEFT: 63pt; TEXT-INDENT: 14.4pt; LINE-HEIGHT: 150%"><span style="LINE-HEIGHT: 150%">Linux/Unix</span><span style="LINE-HEIGHT: 150%">下:</span></div><div style="MARGIN-LEFT: 63pt; TEXT-INDENT: 14.4pt; LINE-HEIGHT: 150%"><span style="LINE-HEIGHT: 150%">$ lsnrctl start aListener</span></div><div style="MARGIN-LEFT: 63pt; TEXT-INDENT: 14.4pt; LINE-HEIGHT: 150%"><span style="LINE-HEIGHT: 150%">Windows</span><span style="LINE-HEIGHT: 150%">下:</span></div><div style="MARGIN-LEFT: 63pt; TEXT-INDENT: 14.4pt; LINE-HEIGHT: 150%"><span style="LINE-HEIGHT: 150%">C:lsnrctl start aListener</span></div><div style="MARGIN-LEFT: 63pt; TEXT-INDENT: 14.4pt; LINE-HEIGHT: 150%"> </div><div style="LINE-HEIGHT: 150%"><strong><span style="LINE-HEIGHT: 150%">(2)<span style="FONT: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal">   </span></span><span style="LINE-HEIGHT: 150%">试q接数据库服务器</span></strong></div><div style="LINE-HEIGHT: 150%"><span style="LINE-HEIGHT: 150%">  试的方法多U多P可以在上面配|本地服务名时进行测试,也可以是W三方客L工具Q如PL/SQL DeveloperQ最方便的是用Oracle自带的sqlplus工具Q以下利用sqlplusq行试Q?/span></div><div style="MARGIN-LEFT: 63pt; TEXT-INDENT: 14.4pt; LINE-HEIGHT: 150%"><span style="LINE-HEIGHT: 150%">C:sqlplus /nolog</span></div><div style="MARGIN-LEFT: 63pt; TEXT-INDENT: 14.4pt; LINE-HEIGHT: 150%"><span style="LINE-HEIGHT: 150%">SQL>conn zgh@myoracle</span></div><div style="MARGIN-LEFT: 63pt; TEXT-INDENT: 14.4pt; LINE-HEIGHT: 150%"><span style="LINE-HEIGHT: 150%">已连接?</span></div><div style="MARGIN-LEFT: 63pt; TEXT-INDENT: 14.4pt; LINE-HEIGHT: 150%"> </div><div style="LINE-HEIGHT: 150%"><strong><span style="LINE-HEIGHT: 150%"></span></strong>  <div style="LINE-HEIGHT: 150%"><strong><span style="LINE-HEIGHT: 150%">四?/span></strong><strong><span style="LINE-HEIGHT: 150%">客户端连接服务器端常见问题排除方?/span></strong></div><div style="LINE-HEIGHT: 150%"><span style="LINE-HEIGHT: 150%">  要排除客L与服务器端的q接问题Q首先检查客L配置是否正确(客户端配|必M数据库服务器端监听配|一?Q再Ҏ(gu)错误提示解决。下面列出几U常见的q接问题Q?/span></div><div style="LINE-HEIGHT: 150%"><strong><span style="LINE-HEIGHT: 150%">1、?/span><span style="LINE-HEIGHT: 150%">ORA-12541: TNS: </span><span style="LINE-HEIGHT: 150%">没有监听?/span></strong></div><div style="LINE-HEIGHT: 150%"><span style="LINE-HEIGHT: 150%">显而易见,服务器端的监听器没有启动Q另外检查客LIP地址或端口填写是否正。启动监听器Q?/span></div><div style="LINE-HEIGHT: 150%"><span style="LINE-HEIGHT: 150%">$ lsnrctl start</span></div><div style="LINE-HEIGHT: 150%"><span style="LINE-HEIGHT: 150%">?/span></div><div style="LINE-HEIGHT: 150%"><span style="LINE-HEIGHT: 150%">C:lsnrctl start</span></div><div style="LINE-HEIGHT: 150%"><strong><span style="LINE-HEIGHT: 150%">2、?/span><span style="LINE-HEIGHT: 150%">ORA-12500: TNS: </span><span style="LINE-HEIGHT: 150%">监听E序无法启动专用服务器进E?/span></strong></div><div style="MARGIN-LEFT: 60pt; LINE-HEIGHT: 150%"><span style="LINE-HEIGHT: 150%">对于Windows而言Q没有启动Oracle实例服务。启动实例服务:</span></div><div style="MARGIN-LEFT: 60pt; LINE-HEIGHT: 150%"><span style="LINE-HEIGHT: 150%">C:oradim –startup -sid myoracle</span></div><div style="LINE-HEIGHT: 150%"><strong><span style="LINE-HEIGHT: 150%">3、?/span><span style="LINE-HEIGHT: 150%">ORA-12535: TNS: </span><span style="LINE-HEIGHT: 150%">操作时</span></strong></div><div style="LINE-HEIGHT: 150%"><span style="LINE-HEIGHT: 150%">  出现q个问题的原因很多,但主要跟|络有关。解册个问题,首先查客L与服务端的网l是否畅通,如果|络q通,则检查两端的防火墙是否阻挡了q接?/span></div><div style="LINE-HEIGHT: 150%"><strong><span style="LINE-HEIGHT: 150%">4、?/span><span style="LINE-HEIGHT: 150%">ORA-12154: TNS: </span><span style="LINE-HEIGHT: 150%">无法处理服务?/span></strong></div><div style="LINE-HEIGHT: 150%"><span style="LINE-HEIGHT: 150%">   查输入的服务名与配置的服务名是否一致。另外注意生成的本地服务名文?Windows下如D:oracleora92networkadmin tnsnames.oraQLinux/Unix?network/admin/tnsnames.ora)里每Ҏ(gu)务的?行服务名U前不能有空根{?/span></div><div style="LINE-HEIGHT: 150%"><strong><span style="LINE-HEIGHT: 150%">5、?/span><span style="LINE-HEIGHT: 150%">ORA-12514: TNS: </span><span style="LINE-HEIGHT: 150%">监听q程不能解析在连接描q符中给出的 SERVICE_NAME</span></strong></div><div style="LINE-HEIGHT: 150%"><span style="LINE-HEIGHT: 150%">  打开Net ManagerQ选中服务名称Q检查服务标识栏里的服务名输入是否正。该服务名必M服务器端监听器配|的全局数据库名一致?/span></div><div style="LINE-HEIGHT: 150%"><strong><span style="LINE-HEIGHT: 150%">6、?/span><span style="LINE-HEIGHT: 150%">Windows</span><span style="LINE-HEIGHT: 150%">下启动监听服务提C找不到路径</span></strong></div><div style="LINE-HEIGHT: 150%"><span style="LINE-HEIGHT: 150%">  ?命o或在服务H口中启动监听提C找不到路径Q或监听服务启动异常。打开注册表,q入HKEY_LOCAL_MACHINE/SYSTEM/Current ControlSet/Services/OracleOraHome92TNSListener,查看ImagePath字符串项是否存在Q如果没 有,讑֮gؓD:oracleora92BINTNSLSNRQ不同的安装路径讑֮值做相应的更攏V这U方法同样适用于Oracle实例服务Q同 上,扑ֈ如同HKEY_LOCAL_MACHINE/SYSTEM/Current ControlSet/Services/Oracle ServiceMYORACLE,查看ImagePath字符串项是否存在Q如果没有,则新建,讑֮gؓd:oracleora92 binORACLE.EXE MYORACLE?/span></div><div style="LINE-HEIGHT: 150%"><span style="LINE-HEIGHT: 150%">以上是Oracle客户端连接服务器端常见的一些问题,当然不能囊括所有的q接异常。解决问题的关键在于Ҏ(gu)与思\Q而不是每U问题都有固定的{案?br /></span></div></div></div></div></div> <img src ="http://m.tkk7.com/kemi/aggbug/160689.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/kemi/" target="_blank">Kimi</a> 2007-11-15 09:54 <a href="http://m.tkk7.com/kemi/archive/2007/11/15/160689.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ORACLE 10G ODBCq接步骤和含义(转)http://m.tkk7.com/kemi/archive/2007/09/26/148352.htmlKimiKimiWed, 26 Sep 2007 08:00:00 GMThttp://m.tkk7.com/kemi/archive/2007/09/26/148352.htmlhttp://m.tkk7.com/kemi/comments/148352.htmlhttp://m.tkk7.com/kemi/archive/2007/09/26/148352.html#Feedback0http://m.tkk7.com/kemi/comments/commentRss/148352.htmlhttp://m.tkk7.com/kemi/services/trackbacks/148352.html    .NET数据存取方式有三U,如图13-1所C。第一U是E序语言Q例如,ASP.NET{)通过OLE DB.NET调用Oracle OLE DBQ再存取Oracle数据库;W二U是E序语言通过ODBC.NET调用Oracle ODBCQ再存取Oracle数据库;W三U是E序语言通过Oracle Data Provider for.NET直接存取Oracle数据库?

另一U数据存取的方式?ComQ如?3-2所C?br />
    .Com数据存取的方式有三种。第一U是E序语言Q例如,ASP.NET{)通过Oracle Objects for OLEQ?040Q存取Oracle数据库;W二U是E序语言通过ActiveX Data ObjectsQADOQ调用Oracle ODBCQ再存取Oracle数据库;W三U是E序语言通过ActiveX Data ObjectsQADOQ调用Oracle OLE DBQ再存取Oracle数据库。另外,E序语言也可以通过COM Automation Feature取得Oracle数据库的数据?
    Oracle 10g Web数据库的存取如同前文所qͼ有多U数据存取的方式。在本节中,使用的方式如?3-3所C?br />
    首先~写ASPQActive Server PageQ程序,通过ADOQActiveX Data ObjectQ访问ODBCQOpen Database ConnectivityQ开攑ּ数据库连接)Q再通过ODBC存取Oracle数据库?
    在Oracle 10g Web数据库的开发环境中Q需要完成下列各工作,才能从Internet上存取Oracle 10g Web数据库,q些工作如下所C:
  • 创徏一个数据库理pȝ
  • 讄ODBC
  • 讄Web ServerQ例如,IIS的虚拟目录)
  • ASPE序的开?
    我们以本书的Misdb数据库ؓ例,请先完成前面章节中的目理Q创?1个表Q分别有EMP、depart、probuy、invoice、customer、delivery、Ord、product、stock、WIP?salgrade表,q插入多条数据。下面,分别介绍讄ODBC、设|Web Server和开发ASPE序?br />
13-2    讄ODBC

    ODBC的全名是Open Database ConnectivityQ开攑ּ数据库连接)Q是应用E序q接数据库的接口。由于计机的类型不同,从个机到大型主机,都有自己处理数据的方式,ODBC则可以连接到相同或不相同的数据库理pȝQ因此,ODBC可以l应用程序提供相同的存取数据库的接口Q程序设计员在设计连接不同数据库Ӟ只要处理与ODBC的连接就可以了,而不必针对不同的数据库设计完全不同的E序。特别需要提醒的是,不同的数据库都有自己对应的ODBC驱动E序Q在使用不同数据库的同时Q务必设|正的ODBC驱动E序。就像在本节中,惌q接Oracle 10g数据库,必设|Oracle ODBC驱动E序Q操作步骤如下:
    Q?Q选择Start→Programs→Oracle-OraDb10g_home1→Configuration and Migration Tools→Microsoft ODBC AdministratorQ如?3-4所C?br />
    Q?Q打开ODBC Data Source AdministratorQ如?3-5所C? 
    Q?Q单击System DSN标签Q如?3-6所C?
    Q?Q单击Add按钮Q出现如?3-7所C的对话框?
    Q?Q向下拖动滚动条Q找到Oracle in OraDb10g_home1选项Q选择该选项Q如?3-8所C?br />
    Q?Q单击Finish按钮Q进入Oracle ODBC Driver Configuration对话框,如图13-9所C?br />
    Data Source NameQ自定义Q程序调用时用这个名Uͼ误入misdbdsn?
    TNS Service NameQOracle TNS服务名称Q在创徏数据库时Q一般默认TNS服务名称与数据库名称相同Q请输入MISDBQ读者也可以自定义?
    User IDQ用L账户名称Q这里用System账户来测试?br />    Q?Q单击Test Connection按钮Q出现Oracle ODBC Driver Connect对话框,如图13-10所C?br />
    PasswordQ请输入安装时给System讄的密码,或自行修改后的密码?
    Q?Q单击OK按钮Q出现如?3-11所C的对话框?
    Q?Q单击OK按钮Q回到Oracle ODBC Driver Configuration对话框,如图13-12所C?
    Q?0Q单击OK按钮Q回到ODBC Data Source Administrator的System DNS选项卡,如图13-13所C?
    Q?1Q单击OK按钮Q完成ODBC的设|?

Kimi 2007-09-26 16:00 发表评论
]]>
MySQL 基本操作Q-Q丢了很久,今天又捡h了,呵呵。玩h的数据库,不过做点程序还是蛮好的Q?/title><link>http://m.tkk7.com/kemi/archive/2007/04/04/108446.html</link><dc:creator>Kimi</dc:creator><author>Kimi</author><pubDate>Wed, 04 Apr 2007 07:34:00 GMT</pubDate><guid>http://m.tkk7.com/kemi/archive/2007/04/04/108446.html</guid><wfw:comment>http://m.tkk7.com/kemi/comments/108446.html</wfw:comment><comments>http://m.tkk7.com/kemi/archive/2007/04/04/108446.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.tkk7.com/kemi/comments/commentRss/108446.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/kemi/services/trackbacks/108446.html</trackback:ping><description><![CDATA[ <table class="style2" cellspacing="0" cellpadding="0" width="95%" align="center" border="0" valign="top"> <tbody> <tr bgcolor="#e7e7e7"> <td width="83%" bgcolor="#e7e7e7" height="20"> <span id="cwqccuw" class="style5"> <strong> <font color="#003366">MySQL数据库的基本操作</font> </strong> </span> </td> <td align="right" width="17%">[ 转蝲 ]</td> </tr> <tr> <td colspan="2"> <img height="10" src="http://www.musemailsvr.com/0.gif" width="1" /> </td> </tr> <tr> <td colspan="2"> <div align="left"> </div> <table height="33" cellspacing="0" cellpadding="0" width="100%" border="0"> <tbody> <tr> <td class="style14"> <p> <br /> <strong>一、连接MYSQL</strong> </p> <p>  格式Q?mysql -hL地址 -u用户?Qp用户密码</p> <p>  1、例1Q连接到本机上的MYSQL?/p> <p>  首先在打开DOSH口Q然后进入目?mysqlbinQ再键入命omysql -h localhost -u root -p+回R,也可以键入命令mysql -u root -pQ回车后提示你输密码Q如果刚安装好MYSQLQ超U用户root是没有密码的Q故直接回R卛_q入到MYSQL中了QMYSQL的提C符是:mysql></p> <p>  2、例2Q连接到q程L上的MYSQL。假设远E主机的IP为:110.110.110.110Q用户名为root,密码为abcd123。则键入以下命oQ?br />   mysql -h110.110.110.110 -uroot -pabcd123</p> <p>  Q注:u与root可以不用加空|其它也一P</p> <p>  3、退出MYSQL命oQ?exit Q回车)</p> <p> <strong>二、修改密?/strong> </p> <p>  格式Qmysqladmin -u用户?-p旧密?password 新密?/p> <p>  1、例1Q给root加个密码ab12。首先在DOS下进入目录mysqlbinQ然后键入以下命?br />   mysqladmin -uroot -password ab12</p> <p>  注:因ؓ开始时root没有密码Q所?p旧密码一就可以省略了?/p> <p>  2、例2Q再root的密码改为djg345?br />   mysqladmin -uroot -pab12 password djg345<br /></p> <p> <strong>三、增加新用户</strong>Q注意:和上面不同,下面的因为是MYSQL环境中的命oQ所以后面都带一个分号作为命令结束符Q?/p> <p>  格式Qgrant select on 数据?* to 用户名@dL identified by "密码"</p> <p>  ?、增加一个用户test1密码为abcQ让他可以在ML上登录,q对所有数据库有查询、插入、修攏V删除的权限。首先用以root用户q入MYSQLQ然后键入以下命令:<br />   grant select,insert,update,delete on *.* to test1@"%" Identified by "abc";<br />   但例1增加的用h十分危险的,你想如某个h知道test1的密码,那么他就可以在internet上的M一台电(sh)脑上d你的mysql数据库ƈ对你的数据可以ؓ所Ʋؓ了,解决办法见例2?/p> <p>  ?、增加一个用户test2密码为abc,让他只可以在localhost上登录,q可以对数据库mydbq行查询、插入、修攏V删除的操作Qlocalhost指本C机,即MYSQL数据库所在的那台LQ,q样用户即用知道test2的密码,他也无法从internet上直接访问数据库Q只能通过MYSQLL上的web|讉K了?br />   grant select,insert,update,delete on mydb.* to test2@localhost identified by "abc";</p> <p>  如果你不想test2有密码,可以再打一个命令将密码消掉?br />   grant select,insert,update,delete on mydb.* to test2@localhost identified by ""; <br /></p> <p>  下面来看看MYSQL中有x据库斚w的操作。注意:必须首先d到MYSQL中,以下操作都是在MYSQL的提C符下进行的Q而且每个命o以分L束?/p> <p> <br /> <strong>四、操作技?/strong> </p> <p>  1、如果你打命令时Q回车后发现忘记加分P你无重打一遍命令,只要打个分号回R可以了。也是说你可以把一个完整的命o分成几行来打Q完后用分号作结束标志就O(jin)K?br />五、显C命?/p> <p>  1、显C数据库列表?br />   show databases;<br />   刚开始时才两个数据库Qmysql和test。mysql库很重要它里面有MYSQL的系l信息,我们改密码和新增用户Q实际上是用这个库q行操作?/p> <p>  2、显C库中的数据表:<br />   use mysqlQ?//打开库,学过FOXBASE的一定不会陌生吧<br />   show tables;</p> <p>  3、显C数据表的结构:<br />   describe 表名;</p> <p>  4、徏库:<br />   create database 库名;</p> <p>  5、徏表:<br />   use 库名Q?br />   create table 表名 (字段讑֮列表)Q?/p> <p>  6、删库和删表:<br />   drop database 库名;<br />   drop table 表名Q?/p> <p>  7、将表中记录清空Q?br />   delete from 表名;</p> <p>  8、显C中的记录Q?br />   select * from 表名;</p> <p> </p> <p> <strong>六、一个徏库和以及插入数据的实?/strong> </p> <p>drop database if exists school; //如果存在SCHOOL则删?br />create database school; //建立库SCHOOL<br />use school; //打开库SCHOOL<br />create table teacher //建立表TEACHER<br />(<br />id int(3) auto_increment not null primary key,<br />name char(10) not null,<br />address varchar(50) default '南阳',<br />year date<br />); //l束<br />//以下为插入字D?br />insert into teacher values(','xuefeng','南阳理工,'1984-05-27');<br />insert into teacher values(','huifan','杞县高中','1985-07-23');</p> <p>注:在徏表中:<br />1.ID设ؓ长度?的数字字D?int(3)q让它每个记录自动加一:auto_incrementq不能ؓI?not null而且让他成ؓdDprimary key?br />2.NAME设ؓ长度?0的字W字Dc?br />3.ADDRESS设ؓ长度50的字W字D,而且~省gؓ'南阳'。  <br />4.YEAR设ؓ日期字段?br /></p> <p>如果你在mysql提示W键入上面的命o也可以,但不方便调试。你可以以上命令原样写入一个文本文件中假设为school.sqlQ然后复制到c:\下,q在DOS状态进入目录\mysql\binQ然后键入以下命令:<br /></p> <p>   mysql -uroot -p密码 < c:\school.sql<br /></p> <p>如果成功Q空Z行无M昄Q如有错误,会有提示。(以上命o已经调试Q你只要?/的注释去掉即可用)?/p> <p> <strong>七、将文本数据转到数据库中</strong> </p> <p>  1、文本数据应W合的格式:字段数据之间用tab键隔开Qnull值用\n来代?<br />   例:<br />    3 yanzi 南阳师院 1984-05-27<br />    4 mike 南阳七中 1985-07-23</p> <p>  2、数据传入命?load data local infile "文g? into table 表名;<br />   注意Q你最好将文g复制到\mysql\bin目录下,q且要先用use命o打表所在的??/p> <p> <strong>八、备份数据库Q?/strong>Q命令在DOS的\mysql\bin目录下执行)</p> <p>  mysqldump --opt school>school.bbb<br />   注释:数据库school备䆾到school.bbb文gQschool.bbb是一个文本文Ӟ文g名Q取,打开看看你会有新发现?/p> </td> </tr> </tbody> </table> </td> </tr> </tbody> </table> <img src ="http://m.tkk7.com/kemi/aggbug/108446.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/kemi/" target="_blank">Kimi</a> 2007-04-04 15:34 <a href="http://m.tkk7.com/kemi/archive/2007/04/04/108446.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>DB40的管理工具object manager1.8的基本? (转自MatriX)http://m.tkk7.com/kemi/archive/2006/12/29/90661.htmlKimiKimiFri, 29 Dec 2006 02:21:00 GMThttp://m.tkk7.com/kemi/archive/2006/12/29/90661.htmlhttp://m.tkk7.com/kemi/comments/90661.htmlhttp://m.tkk7.com/kemi/archive/2006/12/29/90661.html#Feedback0http://m.tkk7.com/kemi/comments/commentRss/90661.htmlhttp://m.tkk7.com/kemi/services/trackbacks/90661.html下載 objectmanager-1.7.1-win_ikvm.zip ( 這個包?java vm)
http://developer.db4o.com/Files/

解壓?直接 運行 objectmanager.bat
然後會出?Object Manager 的介?
選擇 File -> Open "Encrypted" File      // 由於上面 encrypt a為true, 故這裡使用encrypted
browse 上面例子產生的資料n檔案 db.yap
輸入 例子裡的 password : 123123        // 我測試時使用密碼打不? 不入密卻能開啟檔? 其?br />如果成功連接了就會出現下面的畫面Q?br />image

選擇 File -> Query , 選擇要查詢的 Object class
會出現下面的畫面:
image

選擇 File -> Export to XML
輸入 db.xml, 按存檔就會產?db.xml 到目錄裡.
db.xml 的內容為Q?br />
<com.db4o.reflect.generic.GenericObject id="1527">
   <name><>;jane></name>
   <password><>;pass456></password>
</com.db4o.reflect.generic.GenericObject>
<com.db4o.reflect.generic.GenericObject id="2021">
   <name><>;joeyta></name>
   <password><>;pass000></password>
</com.db4o.reflect.generic.GenericObject>


當用commit() 及rollback(), db4o 自動提供 read committed 的transactions.

db4o的功能不,有興的同仁可參考下面更多官方的教學Q?br />http://www.db4o.com/community/testdrive/formulaonetutorial.aspx
http://www.db4o.com/about/productinformation/resources/db4o-5.0-tutorial-java.pdf

Kimi 2006-12-29 10:21 发表评论
]]>
比较 SQL SERVER与ORACLEQ{Q?/title><link>http://m.tkk7.com/kemi/archive/2006/08/22/65093.html</link><dc:creator>Kimi</dc:creator><author>Kimi</author><pubDate>Tue, 22 Aug 2006 07:44:00 GMT</pubDate><guid>http://m.tkk7.com/kemi/archive/2006/08/22/65093.html</guid><wfw:comment>http://m.tkk7.com/kemi/comments/65093.html</wfw:comment><comments>http://m.tkk7.com/kemi/archive/2006/08/22/65093.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.tkk7.com/kemi/comments/commentRss/65093.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/kemi/services/trackbacks/65093.html</trackback:ping><description><![CDATA[ <p> <font face="Arial" size="2">T-SQL是SQL Server的语a引擎Q而Oracle的语a引擎却是PLSQL。这两种查询语言都对ANSI SQL-92标准q行了扩展以提供额外的支持力度。你所创徏的应用程序几乎都要用到这些补充特性。本文就Ҏ(gu)常用的、非标准的Oracle扩展q行了说明,同时q要介绍下如何对q些扩展q行转化以用在SQL Server环境下?</font> </p> <p> <font face="Arial" size="2">列的选择 </font> </p> <p> <font face="Arial" size="2">用PLSQL执行数据查询的时候,FROM子句是必ȝQ这同SQL Server的要求是一L?SELECT语句必须选择针对的数据表。在Oracle数据库内有一U特D的表Dual。Dual表是Oracle中的一个实际存在的表,M用户均可dQ常用在没有目标表的Select中。Dual表由O(jin)racleq同数据字典一同创建,所有的用户都可以用名称DUAL讉K该表。这个表里只有一列DUMMYQ该列定义ؓVARCHAR2(1)cdQ有一行值X。从DUAL表选择数据常被用来通过SELECT语句计算常数表达式,׃DUAL只有一行数据,所以常数只q回一ơ?/font> </p> <p> <font face="Arial" size="2">Oracle下的DUAL查询如下所C: <br />SELECT ‘x?FROM dual <br />而对{的SQL Server查询则是下面q个样子Q?<br />SELECT ‘x?</font> </p> <p> <font face="Arial" size="2">以下是null相关的知识,用到了dualQ?br />SQL> select 1 from dual where null=null;<br />没有查到记录<br />SQL> select 1 from dual where null='';<br />没有查到记录<br />SQL> select 1 from dual where ''=''; <br />没有查到记录<br />SQL> select 1 from dual where null is null;<br />1<br />---------<br />1<br />SQL> select 1 from dual where nvl(null,0)=nvl(null,0);<br />1<br />---------<br />1<br />查看当前q接用户<br />SQL> select user from dual;</font> </p> <p> <font face="Arial" size="2">查看当前日期、时?br />SQL> select sysdate from dual;</font> </p> <p> <font face="Arial" size="2">q接 </font> </p> <p> <font face="Arial" size="2">Oracle用|| W号作ؓq接W,而SQL Server的连接符是加P+ ?</font> </p> <p> <font face="Arial" size="2">Oracle查询如下所C: <br />Select ‘Name?|| ‘Last Name?From tableName </font> </p> <p> <font face="Arial" size="2">对应的SQL Server查询如下所C: <br />Select ‘Name?+ ‘Last Name?</font> </p> <p> <br /> <font face="Arial" size="2">数字取舍 </font> </p> <p> <font face="Arial" size="2">Oracle数据库内有一个TRUNC函数Q该函数q回m位十q制数的n位;如果省略m则n是0位。m的值可以ؓ负,表示截去数点左边m位数字?/font> </p> <p> <font face="Arial" size="2">在SQL Server下可以用Round或者Floor?</font> </p> <p> <font face="Arial" size="2">以下是Oracle查询Q?<br />SELECT TRUNC(15.79,1) "Truncate" FROM DUAL; </font> </p> <p> <font face="Arial" size="2">下面是同cL询的SQL Server版本Q?<br />SELECT ROUND(15.79, 0) rounded , ROUND(15.79, 0,1) truncated <br />SELECT FLOOR(ROUND(15.79, 0)), FLOOR(ROUND(15.79, 0,1) ) </font> </p> <p> <br /> <font face="Arial" size="2">数字转换 </font> </p> <p> <font face="Arial" size="2">Oracle的TO_CHAR函数可以把n位NUMBER数据cd转换为VARCHAR2 数据cdQ同旉用可选的数字格式?</font> </p> <p> <font face="Arial" size="2">SQL Server则通过STR函数q回数字转换之后的字W数据。不q,该函Ch便的Format参数?</font> </p> <p> <font face="Arial" size="2">Oracle查询如下Q?<br />SELECT to_char(123.45 ,99999999999999) from tab <br />SELECT to_char(EXPIRY_DATE,'DDMONYYYY') from tab </font> </p> <p> <font face="Arial" size="2">以下是SQL Server版本的查询: <br />SELECT STR(123.45, 14) <br />SELECT STR(round(123.455 , 2),12,2) <br />SELECT CAST(REPLACE((CONVERT(varchar(12) , EXPIRYDATE, 106 )),' ' , '') as varchar(9)) </font> </p> <p> <br /> <font face="Arial" size="2">LENGTH和LEN </font> </p> <p> <font face="Arial" size="2">以下是Oracle的查询: <br />SELECT LENGTH('SQLMAG') "Length in characters" FROM DUAL; </font> </p> <p> <font face="Arial" size="2">以上查询在SQL Server下是q样写的Q?<br />SELECT LEN('SQLMAG') "Length in characters" </font> </p> <p> <br /> <font face="Arial" size="2">日期 </font> </p> <p> <font face="Arial" size="2">以上两种pȝ都具有各自的当前日期和时间格式?</font> </p> <p> <font face="Arial" size="2">Oracle取得日期和采用如下方式: <br />SYSDATE </font> </p> <p> <font face="Arial" size="2">SQL Server则是q样的: <br />GETDATE() </font> </p> <p> <font face="Arial" size="2">你可以用各种语法操作日期。以下的代码对Oracle日期g的月份进行了格式调整Q返回日期再加上n月)Q?<br />Select add_months(sysdate,12) from dual </font> </p> <p> <font face="Arial" size="2">SQL Server则是如下完成同等功能的: <br />Select dateadd(mm,12,getdate()) </font> </p> <p> <font face="Arial" size="2">数据的减法也不同。以下代码在Oracle中直接对数据q行减法操作Q?<br />SELECT sysdate -add_months(sysdate,12) FROM dual </font> </p> <p> <font face="Arial" size="2">SQL Server则是q样做的Q?<br />SELECT datediff(dd, GetDate(),dateadd(mm,12,getdate())) <br /></font> </p> <img src ="http://m.tkk7.com/kemi/aggbug/65093.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/kemi/" target="_blank">Kimi</a> 2006-08-22 15:44 <a href="http://m.tkk7.com/kemi/archive/2006/08/22/65093.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>CHEK_POS_SALE http://m.tkk7.com/kemi/archive/2006/07/14/58177.htmlKimiKimiFri, 14 Jul 2006 06:05:00 GMThttp://m.tkk7.com/kemi/archive/2006/07/14/58177.htmlhttp://m.tkk7.com/kemi/comments/58177.htmlhttp://m.tkk7.com/kemi/archive/2006/07/14/58177.html#Feedback0http://m.tkk7.com/kemi/comments/commentRss/58177.htmlhttp://m.tkk7.com/kemi/services/trackbacks/58177.html CREATE OR REPLACE Package Body Check_Pos_Sales Is

  /*
  TODO: owner="Administrator" created="2006-4-21"
  text="cell procedure"
  */
  Procedure Exec_Menology_Zsalebymonth(p_Brand   In Varchar2,
                                       p_Branch  In Varchar2,
                                       p_Yearid  In Varchar2,
                                       p_Monthid In Varchar2) Is
 
    Flag    Number;
    Str_Sql Varchar2(1000);
 
    v_Customer_Cc2 Constant Varchar2(20) := 'mm';
    v_Customer_Cc3 Constant Varchar2(20) := 'yyyy';
    -- v_Customer_Cc4 Constant Varchar2(40) := 'yyyy-mm-dd hh24:mi:ss';
 
  Begin
 
    Flag := 0;
    Select Count(*)
      Into Flag
      From Dpdt.Menology Ec
     Where Ec.Brand = p_Brand
       And Ec.Branch = p_Branch
       And Ec.Yearid = p_Yearid
       And Ec.Monthid = p_Monthid;
 
    If (Flag = 1) Then
      Str_Sql := 'Update dpdt.menology w Set w.seqid=portsequence.nextval ,w.monthsale=(Select Nvl(Sum(Sprc), 0) From  ' ||
                 p_Branch || '.Zsale T1 Where To_Char(T1.Sdate,' || '''' ||
                 v_Customer_Cc2 || '''' || ') Like ' || '''' || p_Monthid || '''' ||
                 ' and To_Char(T1.Sdate,' || '''' || v_Customer_Cc3 || '''' ||
                 ') Like ' || '''' || p_Yearid || '''' ||
                 '), w.updated_time= sysdate  where w.branch like ' || '''' ||
                 p_Branch || '''' || ' and w.brand like ' || '''' ||
                 p_Brand || '''' || ' and w.yearid =' || '''' || p_Yearid || '''' ||
                 ' and w.monthid=' || '''' || p_Monthid || '''' || '';
    Elsif (Flag = 0) Then
      Str_Sql := 'Insert into dpdt.menology values(Portsequence.Nextval, ' || '''' ||
                 p_Brand || '''' || ', ' || '''' || p_Branch || '''' || ', ' || '''' ||
                 p_Yearid || '''' || ', ' || '''' || p_Monthid || '''' ||
                 ' ,(Select Nvl(Sum(Sprc), 0) From  ' || p_Branch ||
                 '.Zsale T1 Where To_Char(T1.Sdate,' || '''' ||
                 v_Customer_Cc2 || '''' || ') Like ' || '''' || p_Monthid || '''' ||
                 ' and To_Char(T1.Sdate,' || '''' || v_Customer_Cc3 || '''' ||
                 ') Like ' || '''' || p_Yearid || '''' ||
                 '),sysdate,sysdate)';
    End If;
    Execute Immediate Str_Sql;
    Commit;
  Exception
    When Others Then
      Dbms_Output.Put_Line(Sqlerrm);
      Rollback;
   
  End Exec_Menology_Zsalebymonth;

  /*
  TODO: owner="Administrator" created="2006-4-21"
  text="job procedure"
  */
  Procedure Exec_Menology_Actionjob Is
 
    Cursor C1 Is
      Select Name From Pos_Db_User Group By Name;
 
  Begin
    For V1 In C1 Loop
      Exec_Menology_Zsalebymonth(Substr(V1.Name, 1, 2),
                                 V1.Name,
                                 To_Char(Sysdate, 'yyyy'),
                                 To_Char(Sysdate, 'mm'));
      Exec_Menology_Zsalebymonth(Substr(V1.Name, 1, 2),
                                 V1.Name,
                                 To_Char(Add_Months(Sysdate, -1), 'yyyy'),
                                 To_Char(Add_Months(Sysdate, -1), 'mm'));
   
    End Loop;
    Commit;
  Exception
    When Others Then
      Dbms_Output.Put_Line(Sqlerrm);
      Rollback;
  End Exec_Menology_Actionjob;

  Procedure Exec_Meters_Jobs Is
    Flag         Number;
    Flag2        Number;
    Yearsale     Number;
    Lastyearsale Number;
  Begin
    Select Sum(Monthsale)
      Into Yearsale
      From Dpdt.Menology
     Where Yearid = To_Char(Sysdate, 'yyyy');
    Select Sum(Monthsale)
      Into Lastyearsale
      From Dpdt.Menology
     Where Yearid = To_Char(Add_Months(Sysdate, -12), 'yyyy');
    Flag := 0;
    Select Count(*)
      Into Flag
      From Dpdt.Meters t
     Where t.Saletype = 'FINISH'
       And t.Yearid = To_Char(Sysdate, 'yyyy');
    If (Flag = 1) Then
      Update Dpdt.Meters t
         Set t.Salesum      = Yearsale,
             t.Updated_Time = Sysdate,
             t.Seqid        = Portsequence.Nextval
       Where t.Saletype = 'FINISH'
         And t.Yearid = To_Char(Sysdate, 'yyyy');
    Elsif (Flag = 0) Then
      Insert Into Dpdt.Meters
      Values
        (Portsequence.Nextval,
         'FINISH',
         Yearsale,
         To_Char(Sysdate, 'yyyy'),
         Sysdate,
         Sysdate);
    End If;
 
    Flag2 := 0;
    Select Count(*)
      Into Flag2
      From Dpdt.Meters t
     Where t.Saletype = 'FINISH'
       And t.Yearid = To_Char(Add_Months(Sysdate, -12), 'yyyy');
    If (Flag2 = 1) Then
      Update Dpdt.Meters t
         Set t.Salesum      = Lastyearsale,
             t.Updated_Time = Sysdate,
             t.Seqid        = Portsequence.Nextval
       Where t.Saletype = 'FINISH'
         And t.Yearid = To_Char(Add_Months(Sysdate, -12), 'yyyy');
    Elsif (Flag2 = 0) Then
      Insert Into Dpdt.Meters
      Values
        (Portsequence.Nextval,
         'FINISH',
         Lastyearsale,
         To_Char(Add_Months(Sysdate, -12), 'yyyy'),
         Sysdate,
         Sysdate);
    End If;
    Commit;
  Exception
    When Others Then
      Dbms_Output.Put_Line(Sqlerrm);
      Rollback;
  End Exec_Meters_Jobs;
 
 
 


  Procedure Test_Move_Ready is
    Cursor Cur Is
      select * from dpdt.saledtl;
  begin
    For V1 In Cur Loop
      Test_Move_Action(v1.brhcst,
                       v1.saleno,
                       v1.seqno,
                       v1.styno,
                       v1.sizerun,
                       v1.reject,
                       v1.qty,
                       v1.prc,
                       v1.disc,
                       v1.rebate,
                       v1.cst_prc,
                       v1.org_prc,
                       v1.sprc,
                       v1.rsn);
      /*   insert into dpdt.saledtltest
        (BRHCST,
         saleno,
         seqno,
         styno,
         sizerun,
         reject,
         qty,
         prc,
         disc,
         rebate,
         cst_prc,
         org_prc,
         sprc,
         rsn)
      values
        (v1.brhcst,
         v1.saleno,
         v1.seqno,
         v1.styno,
         v1.sizerun,
         v1.reject,
         v1.qty,
         v1.prc,
         v1.disc,
         v1.rebate,
         v1.cst_prc,
         v1.org_prc,
         v1.sprc,
         v1.rsn);*/
    End Loop;
    Commit;
  Exception
    When Others Then
      Dbms_Output.Put_Line(Sqlerrm);
      Rollback;
   
  End Test_Move_Ready;
 
  Procedure Test_Move_Action(brhcst  In varchar2,
                             saleno  In varchar2,
                             seqno   In integer,
                             styno   In varchar2,
                             sizerun In varchar2,
                             reject  In char,
                             qty     In integer,
                             prc     In number,
                             disc    In number,
                             rebate  In number,
                             cst_prc In number,
                             org_prc In number,
                             sprc    In char,
                             rsn     In char) is
 
  begin
    insert into dpdt.saledtltest
      (BRHCST,
       saleno,
       seqno,
       styno,
       sizerun,
       reject,
       qty,
       prc,
       disc,
       rebate,
       cst_prc,
       org_prc,
       sprc,
       rsn)
    values
      (brhcst,
       saleno,
       seqno,
       styno,
       sizerun,
       reject,
       qty,
       prc,
       disc,
       rebate,
       cst_prc,
       org_prc,
       sprc,
       rsn);
    Commit;
     dbms_output.put_line('ggg');
  Exception
    When Others Then
      Dbms_Output.Put_Line(Sqlerrm);
      Rollback;
   
  End Test_Move_Action;

 
End Check_Pos_Sales;



Kimi 2006-07-14 14:05 发表评论
]]>
2个INIT和UPDATE ORACLE库的Packagehttp://m.tkk7.com/kemi/archive/2006/07/14/58175.htmlKimiKimiFri, 14 Jul 2006 06:03:00 GMThttp://m.tkk7.com/kemi/archive/2006/07/14/58175.htmlhttp://m.tkk7.com/kemi/comments/58175.htmlhttp://m.tkk7.com/kemi/archive/2006/07/14/58175.html#Feedback0http://m.tkk7.com/kemi/comments/commentRss/58175.htmlhttp://m.tkk7.com/kemi/services/trackbacks/58175.html阅读全文

Kimi 2006-07-14 14:03 发表评论
]]>
使用rownum控制查询到的l果http://m.tkk7.com/kemi/archive/2006/07/01/56070.htmlKimiKimiSat, 01 Jul 2006 02:37:00 GMThttp://m.tkk7.com/kemi/archive/2006/07/01/56070.htmlhttp://m.tkk7.com/kemi/comments/56070.htmlhttp://m.tkk7.com/kemi/archive/2006/07/01/56070.html#Feedback0http://m.tkk7.com/kemi/comments/commentRss/56070.htmlhttp://m.tkk7.com/kemi/services/trackbacks/56070.html select * from (select rownum row_id ,t.* from cux_package t)  where row_id between 5 and 9;

Kimi 2006-07-01 10:37 发表评论
]]>
具体的一个引入JAR入ORACLE的语?/title><link>http://m.tkk7.com/kemi/archive/2006/06/16/53209.html</link><dc:creator>Kimi</dc:creator><author>Kimi</author><pubDate>Fri, 16 Jun 2006 03:55:00 GMT</pubDate><guid>http://m.tkk7.com/kemi/archive/2006/06/16/53209.html</guid><wfw:comment>http://m.tkk7.com/kemi/comments/53209.html</wfw:comment><comments>http://m.tkk7.com/kemi/archive/2006/06/16/53209.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.tkk7.com/kemi/comments/commentRss/53209.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/kemi/services/trackbacks/53209.html</trackback:ping><description><![CDATA[ <font size="2">call sys.dbms_java.loadjava('-v -r -grant PUBLIC D:\Oracle\javalib\jconn2.jar')<br />注意路径是ORACLE所在机器的路径</font> <img src ="http://m.tkk7.com/kemi/aggbug/53209.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/kemi/" target="_blank">Kimi</a> 2006-06-16 11:55 <a href="http://m.tkk7.com/kemi/archive/2006/06/16/53209.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>一个简单的oracle pl/sql 调用java的实玎ͼ目标Q从SYBASE数据库里向ERP数据库(OracleQ实现数据流?/title><link>http://m.tkk7.com/kemi/archive/2006/06/13/52347.html</link><dc:creator>Kimi</dc:creator><author>Kimi</author><pubDate>Tue, 13 Jun 2006 01:41:00 GMT</pubDate><guid>http://m.tkk7.com/kemi/archive/2006/06/13/52347.html</guid><wfw:comment>http://m.tkk7.com/kemi/comments/52347.html</wfw:comment><comments>http://m.tkk7.com/kemi/archive/2006/06/13/52347.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.tkk7.com/kemi/comments/commentRss/52347.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/kemi/services/trackbacks/52347.html</trackback:ping><description><![CDATA[ <font size="2">1.向ORACLE里导入SYBASE JDBC 的驱动JAR?br /> 使用语言LOADJAVA?br /> 例如QSQL> call dbms_java.loadjava (?-r -install -v -s -g public -genmissing<br />   absolute path to J2EE_HOME/lib/j2ee.jar?);<br /> 具体可以参考 </font> <a > <font size="2">http://www.stanford.edu/dept/itss/docs/oracle/10g/java.101/b12021/intro.htm</font> </a> <br /> <font size="2">2.导入后在PL/SQL DEVELOPER的JAVA SOURCE里面新徏所用的JAVA CLASS Q一般采用外部调试好的JAVA QCOPY卛_?br /> create or replace and compile java source named ErpToWms as<br />import java.sql.*;<br />import java.util.*;<br />public class ErpToWms {<br /> public static String  dd()throws Exception{<br />  ResultSet rs=null;<br />  Statement stmt=null;<br />  Connection conn=null;<br />  try{<br />  Class.forName("com.sybase.jdbc2.jdbc.SybDriver").newInstance(); <br />  String url ="jdbc:sybase:Tds:192.168.0.206:4000/WMS";//myDBZ的数据库?<br />  Properties sysProps = System.getProperties(); <br />  sysProps.put("user","sa"); <br />  sysProps.put("password",""); <br />   conn= DriverManager.getConnection(url, sysProps);<br />   stmt = conn.createStatement();<br />  String strSql = "select Count(*) from BARCODE t";<br />   rs = stmt.executeQuery(strSql);<br />  if (rs.next()) {<br />   System.out.println(rs.getString(1));<br />  }<br />  return rs.getString(1);<br />  }catch(Exception e){<br />   e.printStackTrace();<br />   return "";<br />  }finally{<br />  rs.close();<br />  stmt.close();<br />  conn.close();<br />  }<br />  }<br />    }<br />3.建立所对应的procedure或者f(xi)untion, 关键是看JAVA SOURCE的返回D定?br />  例如 Function写法Q?br />  create or replace function getDataFromWms return varchar2 is<br />  language java name 'ErpToWms.dd() return String';<br />4.最后写一个简单的procedure调用funtion.OKQ搞?br /><br />有点ȝ的地方,L正?br /><br /><br /></font> <img src ="http://m.tkk7.com/kemi/aggbug/52347.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/kemi/" target="_blank">Kimi</a> 2006-06-13 09:41 <a href="http://m.tkk7.com/kemi/archive/2006/06/13/52347.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SQL&PL/SQL (?http://m.tkk7.com/kemi/archive/2006/06/13/52344.htmlKimiKimiTue, 13 Jun 2006 01:33:00 GMThttp://m.tkk7.com/kemi/archive/2006/06/13/52344.htmlhttp://m.tkk7.com/kemi/comments/52344.htmlhttp://m.tkk7.com/kemi/archive/2006/06/13/52344.html#Feedback0http://m.tkk7.com/kemi/comments/commentRss/52344.htmlhttp://m.tkk7.com/kemi/services/trackbacks/52344.html SQL&PL/SQL
[Q]怎么h询特D字W,如通配W?与_
[A]select * from table where name like 'A_%' escape ''
[Q]如何插入单引号到数据库表?/font>
[A]可以用ASCII码处理,其它Ҏ(gu)字符?amp;也一P?
insert into t values('i'||chr(39)||'m'); -- chr(39)代表字符'
或者用两个单引可CZ?br />or insert into t values('I''m'); -- 两个''可以表示一?
[Q]怎样讄事务一致?/font>
[A]set transaction [isolation level] read committed; 默认语句U一致?br />set transaction [isolation level] serializable;
read only; 事务U一致?br />[Q]怎么样利用游标更新数?/font>
[A]cursor c1 is
select * from tablename
where name is null for update [of column]
…?br />update tablename set column = …?br />where current of c1;
[Q]怎样自定义异?/font>
[A] pragma_exception_init(exception_name,error_number);
如果立即抛出异常
raise_application_error(error_number,error_msg,true|false);
其中number?20000?20999Q错误信息最?048B
异常变量
SQLCODE 错误代码
SQLERRM 错误信息
[Q]十进制与十六q制的{?/font>
[A]8i以上版本Q?br />to_char(100,'XX')
to_number('4D','XX')
8i以下的进制之间的转换参考如下脚?br />create or replace function to_base( p_dec in number, p_base in number )
return varchar2
is
l_str varchar2(255) default NULL;
l_num number default p_dec;
l_hex varchar2(16) default '0123456789ABCDEF';
begin
if ( p_dec is null or p_base is null ) then
return null;
end if;
if ( trunc(p_dec) p_dec OR p_dec 20;
[Q]怎么h取重复记?/font>
[A]select * from table t1 where where t1.rowed !=
(select max(rowed) from table t2
where t1.id=t2.id and t1.name=t2.name)
或?br />select count(*), t.col_a,t.col_b from table t
group by col_a,col_b
having count(*)>1
如果惛_除重复记录,可以把第一个语句的select替换为delete
[Q]怎么栯|自M?/font>
[A]8i以上版本Q不影响M?br />pragma autonomous_transaction;
…?br />commit|rollback;
[Q]怎么样在q程中暂停指定时?/font>
[A]DBMS_LOCK包的sleepq程
如:dbms_lock.sleep(5);表示暂停5U?br />[Q]怎么样快速计事务的旉与日志量
[A]可以采用cM如下的脚?br />DECLARE
start_time NUMBER;
end_time NUMBER;
start_redo_size NUMBER;
end_redo_size NUMBER;
BEGIN
start_time := dbms_utility.get_time;
SELECT VALUE INTO start_redo_size FROM v$mystat m,v$statname s
WHERE m.STATISTIC#=s.STATISTIC#
AND s.NAME='redo size';
--transaction start
INSERT INTO t1
SELECT * FROM All_Objects;
--other dml statement
COMMIT;
end_time := dbms_utility.get_time;
SELECT VALUE INTO end_redo_size FROM v$mystat m,v$statname s
WHERE m.STATISTIC#=s.STATISTIC#
AND s.NAME='redo size';
dbms_output.put_line('Escape Time:'||to_char(end_time-start_time)||' centiseconds');
dbms_output.put_line('Redo Size:'||to_char(end_redo_size-start_redo_size)||' bytes');
END;
[Q]怎样创徏临时?/font>
[A]8i以上版本
create global temporary tablename(column list)
on commit preserve rows; --提交保留数据 会话临时?br />on commit delete rows; --提交删除数据 事务临时?br />临时表是相对于会话的Q别的会话看不到该会话的数据?br />[Q]怎么样在PL/SQL中执行DDL语句
[A]1?i以下版本dbms_sql?br />2?i以上版本q可以用
execute immediate sql;
dbms_utility.exec_ddl_statement('sql');
[Q]怎么栯取IP地址
[A]服务?817以上)Qutl_inaddr.get_host_address
客户端:sys_context('userenv','ip_address')
[Q]怎么样加密存储过E?/font>
[A]用wrap命oQ如Q假定你的存储过E保存ؓa.sqlQ?br />wrap iname=a.sql
PL/SQL Wrapper: Release 8.1.7.0.0 - Production on Tue Nov 27 22:26:48 2001
Copyright (c) Oracle Corporation 1993, 2000. All Rights Reserved.
Processing a.sql to a.plb
提示a.sql转换为a.plbQ这是加密了的脚本Q执行a.plb卛_生成加密了的存储q程
[Q]怎么样在ORACLE中定时运行存储过E?/font>
[A]可以利用dbms_job包来定时q行作业Q如执行存储q程Q一个简单的例子Q提交一个作业:
VARIABLE jobno number;
BEGIN
DBMS_JOB.SUBMIT(:jobno, 'ur_procedure;',SYSDATE,'SYSDATE + 1');
commit;
END;
之后Q就可以用以下语句查询已l提交的作业
select * from user_jobs;
[Q]怎么样从数据库中获得毫秒
[A]9i以上版本Q有一个timestampcd获得毫秒Q如
SQL>select to_char(systimestamp,'yyyy-mm-dd hh24:mi:ssxff') time1,
to_char(current_timestamp) time2 from dual;
TIME1 TIME2
----------------------------- ----------------------------------------------------------------
2003-10-24 10:48:45.656000 24-OCT-03 10.48.45.656000 AM +08:00
可以看到Q毫U在to_char中对应的是FF?br />8i以上版本可以创徏一个如下的java函数
SQL>create or replace and compile
java source
named "MyTimestamp"
as
import java.lang.String;
import java.sql.Timestamp;
public class MyTimestamp
{
public static String getTimestamp()
{
return(new Timestamp(System.currentTimeMillis())).toString();
}
};
SQL>java created.
注:注意java的语法,注意大小?br />SQL>create or replace function my_timestamp return varchar2
as language java
name 'MyTimestamp.getTimestamp() return java.lang.String';
/
SQL>function created.
SQL>select my_timestamp,to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') ORACLE_TIME from dual;
MY_TIMESTAMP ORACLE_TIME
------------------------ -------------------
2003-03-17 19:15:59.688 2003-03-17 19:15:59
如果只想获得1/100U?hsecs)Q还可以利用dbms_utility.get_time
[Q]如果存在更斎ͼ不存在就插入可以用一个语句实现吗
[A]9i已经支持了,是MergeQ但是只支持select子查询,
如果是单条数据记录,可以写作select …?from dual的子查询?br />语法为:
MERGE INTO table
USING data_source
ON (condition)
WHEN MATCHED THEN update_clause
WHEN NOT MATCHED THEN insert_clause;
?br />MERGE INTO course c
USING (SELECT course_name, period,
course_hours
FROM course_updates) cu
ON (c.course_name = cu.course_name
AND c.period = cu.period)
WHEN MATCHED THEN
UPDATE
SET c.course_hours = cu.course_hours
WHEN NOT MATCHED THEN
INSERT (c.course_name, c.period,
c.course_hours)
VALUES (cu.course_name, cu.period,
cu.course_hours);
[Q]怎么实现左联Q右联与外联
[A]?i以前可以q么?
左联Q?br />select a.id,a.name,b.address from a,b
where a.id=b.id(+)
双:
select a.id,a.name,b.address from a,b
where a.id(+)=b.id
外联
SELECT a.id,a.name,b.address
FROM a,b
WHERE a.id = b.id(+)
UNION
SELECT b.id,'' name,b.address
FROM b
WHERE NOT EXISTS (
SELECT * FROM a
WHERE a.id = b.id);
?i以上Q已l开始支持SQL99标准Q所以,以上语句可以写成Q?br />默认内部联结Q?br />select a.id,a.name,b.address,c.subject
from (a inner join b on a.id=b.id)
inner join c on b.name = c.name
where other_clause
左联
select a.id,a.name,b.address
from a left outer join b on a.id=b.id
where other_clause

select a.id,a.name,b.address
from a right outer join b on a.id=b.id
where other_clause
外联
select a.id,a.name,b.address
from a full outer join b on a.id=b.id
where other_clause
or
select a.id,a.name,b.address
from a full outer join b using (id)
where other_clause
[Q]怎么实现一条记录根据条件多表插?/font>
[A]9i以上可以通过Insert all语句完成Q仅仅是一个语句,如:
INSERT ALL
WHEN (id=1) THEN
INTO table_1 (id, name)
values(id,name)
WHEN (id=2) THEN
INTO table_2 (id, name)
values(id,name)
ELSE
INTO table_other (id, name)
values(id, name)
SELECT id,name
FROM a;
如果没有条g的话Q则完成每个表的插入Q如
INSERT ALL
INTO table_1 (id, name)
values(id,name)
INTO table_2 (id, name)
values(id,name)
INTO table_other (id, name)
values(id, name)
SELECT id,name
FROM a;
[Q]如何实现行列转换
[A]1、固定列数的行列转换
?br />student subject grade
---------------------------
student1 语文 80
student1 数学 70
student1 p 60
student2 语文 90
student2 数学 80
student2 p 100
…?br />转换?
语文 数学 p
student1 80 70 60
student2 90 80 100
…?br />语句如下Q?br />select student,sum(decode(subject,'语文', grade,null)) "语文",
sum(decode(subject,'数学', grade,null)) "数学",
sum(decode(subject,'p', grade,null)) "p"
from table
group by student
2、不定列行列转换
?br />c1 c2
--------------
1 ?br />1 ?br />1 ?/font>


Kimi 2006-06-13 09:33 发表评论
]]>
里一位大侠帮我解决的双表兌Q整?/title><link>http://m.tkk7.com/kemi/archive/2006/06/01/49409.html</link><dc:creator>Kimi</dc:creator><author>Kimi</author><pubDate>Thu, 01 Jun 2006 01:38:00 GMT</pubDate><guid>http://m.tkk7.com/kemi/archive/2006/06/01/49409.html</guid><wfw:comment>http://m.tkk7.com/kemi/comments/49409.html</wfw:comment><comments>http://m.tkk7.com/kemi/archive/2006/06/01/49409.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.tkk7.com/kemi/comments/commentRss/49409.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/kemi/services/trackbacks/49409.html</trackback:ping><description><![CDATA[ <font face="Arial" size="2">条g是A,B两表QA中有IDQ同一ID有两|以它更新旉为区别,现在要取的是最新的ID那个|q且兌到B中的一属性。SQL不太好,留在q里以后l箋学习<br /><br />SELECT  Distinct tab1.CUSTOMER_ID, ACV.LAST_NAME,tab1.maxla<br />   FROM AR_CONTACTS_V ACV,<br />        (SELECT RC.CUSTOMER_ID CUSTOMER_ID, MAX(ACV.LAST_UPDATE_DATE) MAXLA<br />           FROM AR_CONTACTS_V ACV, RA_CUSTOMERS RC<br />          WHERE ACV.CUSTOMER_ID(+) = RC.CUSTOMER_ID<br />          GROUP BY RC.CUSTOMER_ID) TAB1<br />  WHERE ACV.CUSTOMER_ID(+) = TAB1.CUSTOMER_ID<br />    AND ACV.LAST_UPDATE_DATE(+) = TAB1.MAXLA<br /><br /><br /></font> <img src ="http://m.tkk7.com/kemi/aggbug/49409.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/kemi/" target="_blank">Kimi</a> 2006-06-01 09:38 <a href="http://m.tkk7.com/kemi/archive/2006/06/01/49409.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>oracle 存储q程调用java class 体会http://m.tkk7.com/kemi/archive/2006/05/29/48704.htmlKimiKimiMon, 29 May 2006 03:37:00 GMThttp://m.tkk7.com/kemi/archive/2006/05/29/48704.htmlhttp://m.tkk7.com/kemi/comments/48704.htmlhttp://m.tkk7.com/kemi/archive/2006/05/29/48704.html#Feedback0http://m.tkk7.com/kemi/comments/commentRss/48704.htmlhttp://m.tkk7.com/kemi/services/trackbacks/48704.html2.建立调用的存储过E?br />create or replace procedure SendMailP as
language java
name 'KemiClass.send()';
3.注意E序体里的文件\径,可以在调试的时候通过操作表来?br />以上Ҏ(gu)个h感觉{同于loadjava命oQ请指教

Kimi 2006-05-29 11:37 发表评论
]]>
关于 LDAPhttp://m.tkk7.com/kemi/archive/2006/05/09/45224.htmlKimiKimiTue, 09 May 2006 07:48:00 GMThttp://m.tkk7.com/kemi/archive/2006/05/09/45224.htmlhttp://m.tkk7.com/kemi/comments/45224.htmlhttp://m.tkk7.com/kemi/archive/2006/05/09/45224.html#Feedback0http://m.tkk7.com/kemi/comments/commentRss/45224.htmlhttp://m.tkk7.com/kemi/services/trackbacks/45224.html

LDAP的详l介l?


如果你在计算业工作,那么对LDAP可能早有耳闻了。想深入C解LDAP吗?那么可以好好地读一下这文章。这介l性的文章是一pd介绍如何在企业中设计、实现和集成LDAP环境的文章的头一。主要是先让你熟(zhn)一下LDAP的基本概念,那些比较困难的细节问题将攑ֈ以后讨论。在q篇文章中我们将要介l:

什么是LDAP?

什么时候该用LDAP存储数据Q?

LDAP目录树的l构

单独的LDAP记录

作ؓ例子的一个单独的数据?

LDAP复制

安全和访问控?

现在LDAP技术不仅发展得很快而且也是Ȁ动h心的。在企业范围内实现LDAP可以让运行在几乎所有计机q_上的所有的应用E序从LDAP目录中获取信息。LDAP目录中可以存储各U类型的数据Q电(sh)子邮件地址、邮件\׃息、h力资源数据、公用密匙、联pMh列表Q等{。通过把LDAP目录作ؓpȝ集成中的一个重要环节,可以化员工在企业内部查询信息的步骤,甚至q主要的数据源都可以攑֜M地方。如果Oracle、Sybase、Informix或Microsoft SQL数据库中已经存储了类似的数据Q那么LDAP和这些数据库到底有什么不同呢Q是什么让它更具优势?Ll读下去吧!

什么是LDAP?
LDAP的英文全U是Lightweight Directory Access ProtocolQ一般都UCؓLDAP。它是基于X.500标准的,但是单多了ƈ且可以根据需要定制。与X.500不同QLDAP支持TCP/IPQ这对访问Internet是必ȝ。LDAP的核心规范在RFC中都有定义,所有与LDAP相关的RFC都可以在LDAPman RFC|页中找到?

怎么使用LDAPq个术语呢?
在日怺谈中Q你可能会听到有些hq么_“我们要把那些东西存在LDAP中吗Q”,或者“从LDAP数据库中取出那些数据Q”,又或者“我们怎么把LDAP和关pd数据库集成在一P”。严格地_LDAPҎ(gu)不是数据库而是用来讉K存储在信息目录(也就是LDAP目录Q中的信息的协议。更为确切和正式的说法应该是象这LQ“通过使用LDAPQ可以在信息目录的正位|读取(或存储)数据”。但是,也没有必要吹毛求疵,管表达得不够准,我们也都知道Ҏ(gu)在说什么?

LDAP目录是数据库吗?
pSybase、Oracle、Informix或Microsoft的数据库理pȝQDBMSQ是用于处理查询和更新关pd数据库那PLDAP服务器也是用来处理查询和更新LDAP目录的。换句话来说LDAP目录也是一U类型的数据库,但是不是关系型数据库。不象被设计成每分钟需要处理成百上千条数据变化的数据库Q例如:在电(sh)子商务中l常用到的在U交易处理(OLTPQ系l,LDAP主要是优化数据读取的性能?

LDAP目录的优?
现在该说说LDAP目录到底有些什么优势了。现在LDAP的流行是很多因数共同作用的结果。我在这里说的不q是一些基本的原因Q请你注意一下这不过是一部分原因?

可能LDAP最大的优势是:可以在Q何计机q_上,用很Ҏ(gu)获得的而且数目不断增加的LDAP的客LE序讉KLDAP目录。而且也很Ҏ(gu)定制应用E序为它加上LDAP的支持?

LDAP协议是跨q_的和标准的协议,因此应用E序׃用ؓLDAP目录攑֜什么样的服务器上操心了。实际上QLDAP得到了业界的q泛认可Q因为它是Internet的标准。商都很愿意在产品中加入对LDAP的支持,因ؓ他们Ҏ(gu)不用考虑另一端(客户端或服务端)是怎么L。LDAP服务器可以是M一个开发源代码或商用的LDAP目录服务器(或者还可能是具有LDAP界面的关pd数据库)Q因为可以用同样的协议、客Lq接软g包和查询命o与LDAP服务器进行交互。与LDAP不同的是Q如果Y件商想在Y件品中集成对DBMS的支持,那么通常都要Ҏ(gu)一个数据库服务器单独定制?

不象很多商用的关pd数据库,你不必ؓLDAP的每一个客Lq接或许可协议付贏V?

大多数的LDAP服务器安装v来很单,也容易维护和优化?

LDAP服务器可以用“推”或“拉”的Ҏ(gu)复制部分或全部数据,例如Q可以把数据“推”到q程的办公室Q以增加数据的安全性。复制技术是内置在LDAP服务器中的而且很容易配|。如果要在DBMS中用相同的复制功能Q数据库产商׃要你支付额外的费用,而且也很隄理?

LDAP允许你根据需要用ACIQ一般都UCؓACL或者访问控制列表)控制Ҏ(gu)据读和写的权限。例如,讑֤理员可以有权改变员工的工作地点和办公室LQ但是不允许改变记录中其它的域。ACI可以Ҏ(gu)谁访问数据、访问什么数据、数据存在什么地方以及其它对数据q行讉K控制。因些都是由LDAP目录服务器完成的Q所以不用担心在客户端的应用E序上是否要q行安全查?

LDAP对于q样存储q样的信息最为有用,也就是数据需要从不同的地点读取,但是不需要经常更新。例如,q些信息存储在LDAP目录中是十分有效的:

l 公司员工的电(sh)话号码簿和组l结构图

l 客户的联pM?

l 计算机管理需要的信息Q包括NIS映射、email假名Q等{?

l 软g包的配置信息

l 公用证书和安全密?

什么时候该用LDAP存储数据Q?
大多数的LDAP服务器都密集型的操作q行专门的优化。因此,当从LDAP服务器中d数据的时候会比从专门为OLTP优化的关pd数据库中d数据快一个数量。也是因Z门ؓȝ性能q行优化Q大多数的LDAP目录服务器ƈ不适合存储需要需要经常改变的数据。例如,用LDAP服务器来存储?sh)话L是一个很好的选择Q但是它不能作ؓ?sh)子商务站点的数据库服务器?

如果下面每一个问题的{案都是“是”,那么把数据存在LDAP中就是一个好L?

l 需要在Mq_上都能读取数据吗Q?

l 每一个单独的记录Ҏ(gu)不是每一天都只有很少的改变?

l 可以把数据存在^面数据库Qflat databaseQ而不是关pd数据库中吗?换句话来_也就是不什么范式不范式的,把所有东襉K存在一个记录中Q差不多只要满W一范式Q?

最后一个问题可能会唬住一些hQ其实用q面数据库去存储一些关pd的数据也是很一般的。例如,一条公司员工的记录可以包含经理的d名。用LDAP来存储这cM息是很方便的。一个简单的判断Ҏ(gu)Q如果可以把保数据存在一张张的卡片里Q就可以很容易地把它存在LDAP目录里?

LDAP目录树的l构
LDAP目录以树状的层次l构来存储数据。如果你对自向下的DNS树或UNIX文g的目录树比较熟?zhn)Q也很Ҏ(gu)掌握LDAP目录树这个概念了。就象DNS的主机名那样QLDAP目录记录的标识名QDistinguished NameQ简UDNQ是用来d单个记录Q以及回溯到树的剙。后面会做详l地介绍?

Z么要用层ơ结构来l织数据呢?原因是多斚w的。下面是可能遇到的一些情况:

l 如果你想把所有的国客户的联pM息都“推”到位于到西雅图办公室(负责营销Q的LDAP服务器上Q但是你不想把公司的资񔽎理信息“推”到那里?

l 你可能想Ҏ(gu)目录树的l构l予不同的员工组不同的权限。在下面的例子里Q资产管理组对“asset-mgmt”部分有完全的访问权限,但是不能讉K其它地方?

l 把LDAP存储和复制功能结合v来,可以定制目录树的l构以降低对WAN带宽的要求。位于西雅图的营销办公室需要每分钟更新的美国销售状늚信息Q但是欧z的销售情况就只要每小时更Cơ就行了?

刨根问底Q基准DN
LDAP目录树的最剙是根,也就是所谓的“基准DN”。基准DN通常使用下面列出的三U格式之一。假定我在名为FooBar的电(sh)子商务公司工作,q家公司在Internet上的名字是foobar.com?

o="FooBar, Inc.", c=US

Q以X.500格式表示的基准DNQ?

在这个例子中Qo=FooBar, Inc. 表示l织名,在这里就是公司名的同义词。c=US 表示公司的总部在美国。以前,一般都用这U方式来表示基准DN。但是事物L在不断变化的Q现在所有的公司都已l(或计划)上Internet上。随着Internet的全球化Q在基准DN中用国家代码很Ҏ(gu)让h产生h。现在,X.500格式发展成下面列出的两种格式?

o=foobar.com

Q用公司的Internet地址表示的基准DNQ?

q种格式很直观,用公司的域名作ؓ基准DN。这也是现在最常用的格式?

dc=foobar, dc=com

Q用DNS域名的不同部分组成的基准DNQ?

p上面那一U格式,q种格式也是以DNS域名为基的,但是上面那种格式不改变域名(也就更易读)Q而这U格式把域名Qfoobar.com分成两部?dc=foobar, dc=com。在理论上,q种格式可能会更灉|一点,但是对于最l用h说也更难记忆一炏V考虑一下foobar.comq个例子。当foobar.com和gizmo.com合ƈ之后Q可以简单的把“dc=com”当作基准DN。把新的记录攑ֈ已经存在的dc=gizmo, dc=com目录下,q样q化了很多工作Q当Ӟ如果foobar.com和wocket.edu合ƈQ这个方法就不能用了Q。如果LDAP服务器是新安装的Q我你用这U格式。再h意一下,如果你打用活动目录(Actrive DirectoryQ,Microsoft已经限制你必M用这U格式?

更上一层楼Q在目录树中怎么l织数据
在UNIX文gpȝ中,最层是根目录QrootQ。在根目录的下面有很多的文g和目录。象上面介绍的那PLDAP目录也是用同LҎ(gu)l织h的?

在根目录下,要把数据从逻辑上区分开。因为历史上QX.500Q的原因Q大多数LDAP目录用OU从逻辑上把数据分开来。OU表示“Organization Unit”,在X.500协议中是用来表示公司内部的机构:销售部、胦务部Q等{。现在LDAPq保留ou=q样的命名规则,但是扩展了分cȝ范围Q可以分cMؓQou=people, ou=groups, ou=devicesQ等{。更低一U的OU有时用来做更l的归类。例如:LDAP目录树(不包括单独的记录Q可能会是这LQ?

dc=foobar, dc=com

ou=customers

ou=asia

ou=europe

ou=usa

ou=employees

ou=rooms

ou=groups

ou=assets-mgmt

ou=nisgroups

ou=recipes

单独的LDAP记录
DN是LDAP记录的名字
在LDAP目录中的所有记录项都有一个唯一的“Distinguished Name”,也就是DN。每一个LDAP记录的DN是由两个部分l成的:相对DNQRDNQ和记录在LDAP目录中的位置?

RDN是DN中与目录树的l构无关的部分。在LDAP目录中存储的记录w要有一个名字,q个名字通常存在cnQCommon NameQ这个属性里。因为几乎所有的东西都有一个名字,在LDAP中存储的对象都用它们的cng为RDN的基。如果我把最喜欢的吃燕麦_食谱存Z个记录,我就会用cn=Oatmeal Deluxe作ؓ记录的RDN?

l 我的LDAP目录的基准DN是dc=foobar,dc=com

l 我把自己的食׃为LDAP的记录项存在ou=recipes

l 我的LDAP记录的RDN设ؓcn=Oatmeal Deluxe

上面q些构成了燕麦粥食谱的LDAP记录的完整DN。记住,DN的读法和DNSL名类伹{下面就是完整的DNQ?

cn=Oatmeal Deluxe,ou=recipes,dc=foobar,dc=com

举一个实际的例子来说明DN
现在为公司的员工讄一个DN。可以用Zcn或uidQUser IDQ,作ؓ典型的用户帐受例如,FooBar的员工Fran SmithQ登录名QfsmithQ的DN可以Z面两U格式:

uid=fsmith,ou=employees,dc=foobar,dc=com

Q基于登录名Q?

LDAPQ以及X.500Q用uid表示“User ID”,不要把它和UNIX的uidh؜淆了。大多数公司都会l每一个员工唯一的登录名Q因此用q个办法可以很好C存员工的信息。你不用担心以后q会有一个叫Fran Smith的加入公司,如果Fran改变了她的名字(l婚Q离婚?或宗教原因?Q,也用不着改变LDAP记录的DN?

cn=Fran Smith,ou=employees,dc=foobar,dc=com

Q基于姓名)

可以看到q种格式使用了Common NameQCNQ。可以把Common Name当成一个h的全名。这U格式有一个很明显的缺点就是:如果名字改变了,LDAP的记录就要从一个DN转移到另一个DN。但是,我们应该可能地避免改变一个记录项的DN?

定制目录的对象类?
你可以用LDAP存储各种cd的数据对象,只要q些对象可以用属性来表示Q下面这些是可以在LDAP中存储的一些信息:

l 员工信息Q员工的姓名、登录名、口令、员工号、他的经理的d名,邮g服务器,{等?

l 物品跟踪信息Q计机名、IP地址、标{、型受所在位|,{等?

l 客户联系列表Q客L公司名、主要联pMh的电(sh)话、传真和?sh)子邮gQ等{?

l 会议厅信息:会议厅的名字、位|、可以坐多少人、电(sh)话号码、是否有投媄机?

l 食谱信息Q菜的名字、配料、烹调方法以及准备方法?

因ؓLDAP目录可以定制成存储Q何文本或二进制数据,到底存什么要׃自己军_。LDAP目录用对象类型(object classesQ的概念来定义运行哪一cȝ对象使用什么属性。在几乎所有的LDAP服务器中Q你都要Ҏ(gu)自己的需要扩展基本的LDAP目录的功能,创徏新的对象cd或者扩展现存的对象cd?

LDAP目录以一pd“属性对”的形式来存储记录项Q每一个记录项包括属性类型和属性|q与关系型数据库用行和列来存取数据有Ҏ(gu)的不同)。下面是我存在LDAP目录中的一部分食谱记录Q?

dn: cn=Oatmeal Deluxe, ou=recipes, dc=foobar, dc=com

cn: Instant Oatmeal Deluxe

recipeCuisine: breakfast

recipeIngredient: 1 packet instant oatmeal

recipeIngredient: 1 cup water

recipeIngredient: 1 pinch salt

recipeIngredient: 1 tsp brown sugar

recipeIngredient: 1/4 apple, any type

h意上面每一U配料都作ؓ属性recipeIngredient倹{LDAP目录被设计成象上面那样ؓ一个属性保存多个值的Q而不是在每一个属性的后面用逗号把一pd值分开?

因ؓ用这L方式存储数据Q所以数据库有很大的灵zL,不必为加入一些新的数据就重新创徏表和索引。更重要的是QLDAP目录不必p内存或硬盘空间处理“空”域Q也是_实际上不使用可选择的域也不会花费你M资源?

作ؓ例子的一个单独的数据?
让我们看看下面这个例子。我们用Foobar, Inc.的员工Fran Smith的LDAP记录。这个记录项的格式是LDIFQ用来导入和导出LDAP目录的记录项?

dn: uid=fsmith, ou=employees, dc=foobar, dc=com

objectclass: person

objectclass: organizationalPerson

objectclass: inetOrgPerson

objectclass: foobarPerson

uid: fsmith

givenname: Fran

sn: Smith

cn: Fran Smith

cn: Frances Smith

telephonenumber: 510-555-1234

roomnumber: 122G

o: Foobar, Inc.

mailRoutingAddress:
fsmith@foobar.com

mailhost: mail.foobar.com

userpassword: {crypt}3x1231v76T89N

uidnumber: 1234

gidnumber: 1200

homedirectory: /home/fsmith

loginshell: /usr/local/bin/bash

属性的值在保存的时候是保留大小写的Q但是在默认情况下搜索的时候是不区分大写的。某些特D的属性(例如QpasswordQ在搜烦的时候需要区分大写?

让我们一点一点地分析上面的记录项?

dn: uid=fsmith, ou=employees, dc=foobar, dc=com

q是Fran的LDAP记录的完整DNQ包括在目录树中的完整\径。LDAPQ和X.500Q用uidQUser IDQ,不要把它和UNIX的uidh؜淆了?

objectclass: person

objectclass: organizationalPerson

objectclass: inetOrgPerson

objectclass: foobarPerson

可以ZQ何一个对象根据需要分配多个对象类型。person对象cd要求cnQcommon nameQ和snQsurnameQ这两个域不能ؓI。persion对象cd允许有其它的可选域Q包括givenname、telephonenumberQ等{。organizational Personlperson加入更多的可选域QinetOrgPerson又加入更多的可选域Q包括电(sh)子邮件信息)。最后,foobarPerson是ؓFoobar定制的对象类型,加入了很多定制的属性?

uid: fsmith

givenname: Fran

sn: Smith

cn: Fran Smith

cn: Frances Smith

telephonenumber: 510-555-1234

roomnumber: 122G

o: Foobar, Inc.

以前说过了,uid表示User ID。当看到uid的时候,在脑袋里想一想“login”?

h意CN有多个倹{就象上面介l的QLDAP允许某些属性有多个倹{ؓ什么允许有多个值呢Q假定你在用公司的LDAP服务器查找Fran的电(sh)话号码。你可能只知道她的名字叫FranQ但是对人力资源处的人来说她的正式名字叫做Frances。因Z存了她的两个名字Q所以用M一个名字检索都可以扑ֈFran的电(sh)话号码、电(sh)子邮件和办公戉KP{等?

mailRoutingAddress:
fsmith@foobar.com

mailhost: mail.foobar.com

p现在大多数的公司都上|了QFoobar用Sendmail发送邮件和处理外部邮g路由信息。Foobar把所有用L邮g信息都存在LDAP中。最新版本的Sendmail支持q项功能?

Userpassword: {crypt}3x1231v76T89N

uidnumber: 1234

gidnumber: 1200

gecos: Frances Smith

homedirectory: /home/fsmith

loginshell: /usr/local/bin/bash

注意QFoobar的系l管理员把所有用L口o映射信息也都存在LDAP中。FoobarPersoncd的对象具有这U能力。再注意一下,用户口o是用UNIX的口令加密格式存储的。UNIX的uid在这里ؓuidnumber。提醒你一下,关于如何在LDAP中保存NIS信息Q有完整的一份RFC。在以后的文章中我会谈一谈NIS的集成?

LDAP复制
LDAP服务器可以用基于“推”或者“拉”的技术,用简单或Z安全证书的安全验证,复制一部分或者所有的数据?

例如QFoobar有一个“公用的”LDAP服务器,地址为ldap.foobar.comQ端口ؓ389。Netscape Communicator的电(sh)子邮件查询功能、UNIX的“ph”命令要用到q个服务器,用户也可以在M地方查询q个服务器上的员工和客户联系信息。公司的主LDAP服务器运行在相同的计机上,不过端口h1389?

你可能即不想让员工查询资产管理或食谱的信息,又不惌信息技术h员看到整个公司的LDAP目录。ؓ了解册个问题,Foobar有选择地把子目录树从主LDAP服务器复制到“公用”LDAP服务器上Q不复制需要隐藏的信息。ؓ了保持数据始l是最新的Q主目录服务器被讄成即时“推”同步。这些种Ҏ(gu)主要是ؓ了方便,而不是安全,因ؓ如果有权限的用户x询所有的数据Q可以用另一个LDAP端口?

假定Foobar通过从奥克兰到欧z的低带宽数据的q接用LDAP理客户联系信息。可以徏立从ldap.foobar.com:1389到munich-ldap.foobar.com:389的数据复Ӟ象下面这P

periodic pull: ou=asia,ou=customers,o=sendmail.com

periodic pull: ou=us,ou=customers,o=sendmail.com

immediate push: ou=europe,ou=customers,o=sendmail.com

“拉”连接每15分钟同步一ơ,在上面假定的情况下够了。“推”连接保证Q何欧z的联系信息发生了变化就立即被“推”到Munich?

用上面的复制模式Q用户ؓ了访问数据需要连接到哪一台服务器呢?在Munich的用户可以简单地q接到本地服务器。如果他们改变了数据Q本地的LDAP服务器就会把q些变化传到主LDAP服务器。然后,主LDAP服务器把q些变化“推”回本地的“公用”LDAP服务器保持数据的同步。这Ҏ(gu)地的用户有很大的好处Q因为所有的查询Q大多数是读Q都在本地的服务器上q行Q速度非常快。当需要改变信息的时候,最l用户不需要重新配|客L的YӞ因ؓLDAP目录服务器ؓ他们完成了所有的数据交换工作?

安全和访问控?
LDAP提供很复杂的不同层次的访问控制或者ACI。因q些讉K可以在服务器端控Ӟq比用客L的Y件保证数据的安全可安全多了?

用LDAP的ACIQ可以完成:

l l予用户改变他们自己的电(sh)话号码和家庭地址的权限,但是限制他们对其它数据(如,职务名称Q经理的d名,{等Q只有“只诠Z权限?

l l予“HR-admins”组中的所有h权限以改变下面这些用L信息Q经理、工作名U、员工号、部门名U和部门受但是对其它域没有写权限?

l 止M人查询LDAP服务器上的用户口令,但是可以允许用户改变他或她自q口o?

l l予l理讉K他们上的家庭电(sh)话的只读权限Q但是禁止其他h有这个权限?

l l予“host-admins”组中的M人创建、删除和~辑所有保存在LDAP服务器中的与计算Z机有关的信息

l 通过WebQ允许“foobar-sales”组中的成员有选择地给予或止他们自己d一部分客户联系数据的读权限。这允总们把客户联系信息下蝲到本地的W记本电(sh)脑或个h数字助理QPDAQ上。(如果销售h员的软g都支持LDAPQ这非常有用)

l 通过WebQ允许组的所有者删除或d他们拥有的组的成员。例如:可以允许销售经理给予或止销售h员改变Web늚权限。也可以允许邮g假名Qmail aliaseQ的所有者不l过IT技术h员就直接从邮件假名中删除或添加用戗“公用”的邮g列表应该允许用户从邮件假名中d或删除自己(但是只能是自己)。也可以对IP地址或主机名加以限制。例如,某些域只允许用户IP地址?92.168.200.*开头的有读的权限,或者用户反向查找DNS得到的主机名必须?.foobar.com?

 



Kimi 2006-05-09 15:48 发表评论
]]>
OLAP 记http://m.tkk7.com/kemi/archive/2006/05/07/44890.htmlKimiKimiSun, 07 May 2006 09:32:00 GMThttp://m.tkk7.com/kemi/archive/2006/05/07/44890.htmlhttp://m.tkk7.com/kemi/comments/44890.htmlhttp://m.tkk7.com/kemi/archive/2006/05/07/44890.html#Feedback0http://m.tkk7.com/kemi/comments/commentRss/44890.htmlhttp://m.tkk7.com/kemi/services/trackbacks/44890.html
OLAPQ英文全UCؓOn-Line Analysis ProcessingQ中文名UCؓ联机分析处理Q也UCؓ在线
分析处理
?br />
随着数据库技术的发展和应用,数据库存储的数据量从20世纪80q代的兆QMQ字节及千兆QGQ?br />字节q渡到现在的兆兆QTQ字节和千兆兆(PQ字节,同时Q用L查询需求也来复杂,?br />及的已不仅是查询或操U一张关p表中的一条或几条记录Q而且要对多张表中千万条记录的数据
q行数据分析和信息综合,关系数据库系l已不能全部满q一要求。操作型应用和分析型应用Q?br />特别是在性能上难以两全,Z常常在关pL据库中放宽了对冗余的限制Q引入了l计及综合数
据,但这些统计综合数据的应用逻辑是分散而杂q、非pȝ化的Q因此分析功能有限,不灵z,
l护困难。在国外Q不Y件厂商采取了发展其前端品来弥补关系数据库管理系l支持的不Q?br />他们通过专门的数据综合引擎,辅之以更加直观的数据讉K界面Q力囄一分散的公共应用逻辑Q?br />在短旉内响应非数据处理专业人员的复杂查询要求?993q_E.F.CoddQ关pL据库之父Q将
q类技术定义ؓ“OLAP”?br />
OLAP是共享多l信息的、针对特定问题的联机数据讉K和分析的快速Y件技术。它通过对信息的
多种可能的观察Ş式进行快速、稳定一致和交互性的存取Q允许管理决{h员对数据q行深入观察
。决{数据是多维数据Q多l数据就是决{的主要内容。OLAP专门设计用于支持复杂的分析操作,
侧重对决{h员和高层理人员的决{支持,可以Ҏ(gu)分析人员的要求快速、灵zdq行大数据量
的复杂查询处理,q且以一U直观而易懂的形式查询结果提供给决策人员Q以便他们准掌握企
业(公司Q的l营状况Q了解对象的需求,制定正确的方案?br />
OLAPh灉|的分析功能、直观的数据操作和分析结果可视化表示{突Z点,从而用户对基
于大量复杂数据的分析变得L而高效,以利于迅速做出正判断。它可用于证实h们提出的复杂
的假设,其结果是以图形或者表格的形式来表C的对信息的ȝ。它q不异怿息标记出来,?br />一U知识证实的Ҏ(gu)?


Kimi 2006-05-07 17:32 发表评论
]]>
ORACLE 成长QORACLE JOBS 参数http://m.tkk7.com/kemi/archive/2006/04/21/42317.htmlKimiKimiFri, 21 Apr 2006 06:58:00 GMThttp://m.tkk7.com/kemi/archive/2006/04/21/42317.htmlhttp://m.tkk7.com/kemi/comments/42317.htmlhttp://m.tkk7.com/kemi/archive/2006/04/21/42317.html#Feedback0http://m.tkk7.com/kemi/comments/commentRss/42317.htmlhttp://m.tkk7.com/kemi/services/trackbacks/42317.html DBA_JOBS
Q=Q=Q=Q=Q=Q=Q=Q=Q=Q=Q=Q=Q=Q=Q=Q=Q=Q=Q=Q=Q=Q?br />字段Q列Q        ?cd                 描述
JOB                NUMBER          d的唯一标示?
LOG_USER           VARCHAR2(30)    提交d的用?
PRIV_USER          VARCHAR2(30)    赋予d权限的用?
SCHEMA_USER        VARCHAR2(30)    对Q务作语法分析的用h?
LAST_DATE          DATE            最后一ơ成功运行Q务的旉
LAST_SEC           VARCHAR2(8)     如HH24:MM:SS格式的last_date日期的小Ӟ分钟和秒
THIS_DATE     DATE            正在q行d的开始时_如果没有q行d则ؓnull
THIS_SEC     VARCHAR2(8)     如HH24:MM:SS格式的this_date日期的小Ӟ分钟和秒
NEXT_DATE          DATE            下一ơ定时运行Q务的旉
NEXT_SEC           VARCHAR2(8)     如HH24:MM:SS格式的next_date日期的小Ӟ分钟和秒
TOTAL_TIME         NUMBER          该Q务运行所需要的L_单位为秒
BROKEN             VARCHAR2(1)     标志参数QY标示d中断Q以后不会运?
INTERVAL           VARCHAR2(200)   用于计算下一q行旉的表辑ּ
FAILURES    NUMBER     dq行q箋没有成功的次?
WHAT               VARCHAR2(2000)  执行d的PL/SQL?
CURRENT_SESSION_LABEL RAW          MLSLABEL 该Q务的信QOracle会话W?
CLEARANCE_HI      RAW MLSLABEL     该Q务可信Q的Oracle最大间?
CLEARANCE_LO      RAW              MLSLABEL 该Q务可信Q的Oracle最间?
NLS_ENV           VARCHAR2(2000)   dq行的NLS会话讄
MISC_ENV          RAW(32)          dq行的其他一些会话参?


描述                    INTERVAL参数?
每天午夜12点          ?'TRUNC(SYSDATE + 1)'
每天早上8?0分       ?'TRUNC(SYSDATE + 1) + Q?*60+30Q?(24*60)'
每星期二中午12点       ?'NEXT_DAY(TRUNC(SYSDATE ), ''TUESDAY'' ) + 12/24'
每个月第一天的午夜12点  ?'TRUNC(LAST_DAY(SYSDATE ) + 1)'
每个季度最后一天的晚上11?'TRUNC(ADD_MONTHS(SYSDATE + 2/24, 3 ), 'Q' ) -1/24'
每星期六和日早上6?0分  ?'TRUNC(LEAST(NEXT_DAY(SYSDATE, ''SATURDAY"), NEXT_DAY(SYSDATE, "SUNDAY"))) + Q?×60+10Q?Q?4×60Q?



Kimi 2006-04-21 14:58 发表评论
]]>
ORACLE成长 Q一个动态SQLhttp://m.tkk7.com/kemi/archive/2006/04/20/42197.htmlKimiKimiThu, 20 Apr 2006 09:13:00 GMThttp://m.tkk7.com/kemi/archive/2006/04/20/42197.htmlhttp://m.tkk7.com/kemi/comments/42197.htmlhttp://m.tkk7.com/kemi/archive/2006/04/20/42197.html#Feedback0http://m.tkk7.com/kemi/comments/commentRss/42197.htmlhttp://m.tkk7.com/kemi/services/trackbacks/42197.html CREATE OR REPLACE Procedure Filldpb(Username1 In Varchar2) Is

 Str_Sql Varchar2(1000);
 v_Customer_Cc1 Constant Varchar2(20) := 'DP';
 v_Customer_Cc2 Constant Varchar2(20) := 'mm';
 v_Customer_Cc3 Constant Varchar2(20) := 'yyyy';
 Logid Number(20);

Begin
 Logid := 0;
 Select Decode((Select Nvl(Menologyid, 0)
         From Dpdt.Menology Ec
         Where Ec.Brand = 'DP' And Ec.Branch = Username1 And Ec.Yearid = To_Char(Sysdate, 'yyyy') And
            Ec.Monthid = To_Char(Sysdate, 'mm')), Null, 0, 1)
 Into Logid
 From Dual;

 If (Logid <> 0) Then
  Str_Sql := 'Update dpdt.menology w Set w.sumsale=(Select Nvl(Sum(Sprc), 0) From  ' || Username1 ||
        '.Zsale T1 Where To_Char(T1.Sdate,' || '''' || v_Customer_Cc2 || '''' || ') Like To_Char(Sysdate,' || '''' ||
        v_Customer_Cc2 || '''' || '))';
 Else
  Str_Sql := 'Insert into dpdt.menology values(Portsequence.Nextval, ' || '''' || v_Customer_Cc1 || '''' || ', ' || '''' ||
        Username1 || '''' || ', To_Char(Sysdate, ' || '''' || v_Customer_Cc3 || '''' || '), To_Char(Sysdate, ' || '''' ||
        v_Customer_Cc2 || '''' || '),(Select Nvl(Sum(Sprc), 0) From ' || Username1 ||
        ' .Zsale T1 Where To_Char(T1.Sdate, ' || '''' || v_Customer_Cc2 || '''' || ') Like To_Char(Sysdate, ' || '''' ||
        v_Customer_Cc2 || '''' || ')))';
 
  /*Str_Sql := ' Merge Into Dpdt.Menology Using (Select * From Dpdt.Menology Ec Where Ec.Brand = ' || '''' ||
            v_Customer_Cc1 || '''' || ' And Ec.Branch = ' || '''' || Username || '''' ||
            ' And Ec.Yearid = To_Char(Sysdate, ' || '''' || v_Customer_Cc3 || '''' ||
            ') And Ec.Monthid = To_Char(Sysdate, ' || '''' || v_Customer_Cc2 || '''' ||
            ')) Cc On (Cc.Menologyid Is Not Null) When Matched Then Update Set Sumsale = (Select Nvl(Sum(Sprc), 0) From ' || Username || ' .Zsale T1 Where To_Char(T1.Sdate, ' || '''' || v_Customer_Cc2 || '''' || ') Like To_Char(Sysdate, ' || '''' ||
            v_Customer_Cc2 || '''' || '))
   
    When Not Matched Then Insert(Menologyid, Brand, Branch, Yearid, Monthid, Sumsale) Values(Portsequence.Nextval, ' || '''' || v_Customer_Cc1 || '''' || ', ' || '''' || Username || '''' ||
            ', To_Char(Sysdate, ' || '''' || v_Customer_Cc3 || '''' || '), To_Char(Sysdate, ' || '''' || v_Customer_Cc2 || '''' ||
            '),(Select Nvl(Sum(Sprc), 0) From ' || Username || ' .Zsale T1 Where To_Char(T1.Sdate, ' || '''' || v_Customer_Cc2 || '''' || ') Like To_Char(Sysdate, ' || '''' ||
            v_Customer_Cc2 || '''' || ')) ';*/
 End If;
 Execute Immediate Str_Sql; --动态执行DDL语句
 Commit;
Exception
 When Others Then
  Dbms_Output.Put_Line(Sqlerrm);
  Rollback;
End Filldpb;



Kimi 2006-04-20 17:13 发表评论
]]>
վ֩ģ壺 þùƷۺ | ˾ƷƵȫ| avۺavһ| СƵ߹ۿ| ûɫվ| aëƬѹۿ| Ůxx00ƵԿ| anպר| AV˾Ʒվ߲| ޹aƷ| ëƬaëƬѹۿƷ| þֻƷ99| һŮȫƬѿ| ޵һڶĵ| ޹һ| vavavaĻ| Իavҹҹˬ| ԻƤȫƵѹ30| ƷһʽӰ| 99re6Ƶ| ٸƷһѶ̬| ߹ۿ˳Ƶڵ| ߳Ķ| һ͵| Ļ| ޹պ߳ѿ| ޳˸߹ۿ| Ƶȫ| պ| Ƶѹۿ| ˾þô߽槼| þþþþþþ| AVƬɫ߹ۿ| þAVҹƷһ | ޾ƷavƬ| ˳С˵վɫ| 99þùۺϾƷ| ҹ޾Ʒ| av뾫Ʒ| һëƬѿ| һƬѿ|