﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-火星的森林-随笔分类-DB2</title><link>http://www.blogjava.net/marsforest/category/21546.html</link><description>欢迎到火星来</description><language>zh-cn</language><lastBuildDate>Thu, 12 Apr 2007 04:33:29 GMT</lastBuildDate><pubDate>Thu, 12 Apr 2007 04:33:29 GMT</pubDate><ttl>60</ttl><item><title>DB2存储过程小经验</title><link>http://www.blogjava.net/marsforest/archive/2007/04/12/110090.html</link><dc:creator>火星的森林</dc:creator><author>火星的森林</author><pubDate>Thu, 12 Apr 2007 02:13:00 GMT</pubDate><guid>http://www.blogjava.net/marsforest/archive/2007/04/12/110090.html</guid><wfw:comment>http://www.blogjava.net/marsforest/comments/110090.html</wfw:comment><comments>http://www.blogjava.net/marsforest/archive/2007/04/12/110090.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/marsforest/comments/commentRss/110090.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/marsforest/services/trackbacks/110090.html</trackback:ping><description><![CDATA[<p>1、insert into "test" <br>&nbsp;&nbsp; (<br>&nbsp;&nbsp;&nbsp; select char(f_index) from T_QA_RPT_FACE_MONTH where F_RPT_ID=0<br>&nbsp;&nbsp; );<br>如果&#8220;select char(f_index) from T_QA_RPT_FACE_MONTH where F_RPT_ID=0&#8220;<br>返回结果数为0，那么test表中不会插入记录。</p>
<p>2、存储过程里用for语句比while loop好用些：（类似VB语法）<br>SET SCHEMA MES&nbsp;&nbsp;&nbsp;&nbsp; ;</p>
<p>SET CURRENT PATH = "SYSIBM","SYSFUN","SYSPROC","MES";</p>
<p>CREATE PROCEDURE "MES"."P_QA_TEST" ( ) <br>&nbsp;<br>DECLARE iCount INT DEFAULT 0;&nbsp; </p>
<p>SET iCount = 0;<br>FOR dayrpt AS SELECT * FROM T_QA_RPT_FACE_DAY WHERE F_RPT_ID &gt; 0 DO<br>&nbsp; ADD_BONUS:<br>&nbsp; for monrpt as SELECT * FROM T_QA_RPT_FACE_MONTH WHERE F_RPT_ID &gt; 0 DO<br>&nbsp; &nbsp;&nbsp; if (monrpt.F_INDEX =&nbsp; dayrpt.F_INDEX) AND (monrpt.F_TYPE =&nbsp; dayrpt.F_TYPE) THEN<br>&nbsp;&nbsp; &nbsp; SET iCount=iCount+1; <br>&nbsp;&nbsp; insert into "test" values(char(iCount));<br>&nbsp;&nbsp; LEAVE ADD_BONUS;<br>&nbsp;&nbsp; END IF;<br>&nbsp; end for ADD_BONUS;<br>&nbsp;&nbsp; <br>END FOR;<br>&nbsp;&nbsp;&nbsp; return iCount;<br>END;</p>
<p>3、上例中：<br>FOR dayrpt AS SELECT * FROM T_QA_RPT_FACE_DAY WHERE F_RPT_ID &gt; 0 DO<br>dayrpt 就是后面那个select语句的结果集，即for语句只需读一次表，而不会像游标那样锁定表然后进行逐记录select</p>
<img src ="http://www.blogjava.net/marsforest/aggbug/110090.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/marsforest/" target="_blank">火星的森林</a> 2007-04-12 10:13 <a href="http://www.blogjava.net/marsforest/archive/2007/04/12/110090.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>