<?xml version="1.0" standalone="yes"?>
<?xml-stylesheet type="text/xsl" href="css/rss.xslt"?>
<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>王波的博客 - 数据库</title><link>http://www.1314lucky.cn/</link><description>幸运的笨小孩 - </description><generator>RainbowSoft Studio Z-Blog 1.8 Arwen Build 90619</generator><language>zh-CN</language><copyright>Copyright xxxx-xxxx Your WebSite. Some Rights Reserved.</copyright><pubDate>Sun, 05 Sep 2010 05:08:39 +0800</pubDate><item><title>关于存储过程返回多个输出参数</title><author>wb8180013@163.com (lucky)</author><link>http://www.1314lucky.cn/post/5.html</link><pubDate>Sun, 19 Jul 2009 22:17:54 +0800</pubDate><guid>http://www.1314lucky.cn/post/5.html</guid><description><![CDATA[<p>package db;<br /><br />import java.sql.CallableStatement;<br />import java.sql.Connection;<br />import java.sql.DriverManager;<br />import java.sql.Types;<br /><br />public class TestJDBC {<br /><br />&nbsp;&nbsp; &nbsp;public static void main(String[] args) {<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;String driver = &quot;oracle.jdbc.driver.OracleDriver&quot;;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;String url = &quot;jdbc:oracle:thin:@127.0.0.1:1521:gyp&quot;;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;Connection conn = null;<br /><br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;try {<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;// 加载Oracle驱动程序<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;Class.forName(driver);<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;// 获取数据库连接<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;conn = DriverManager.getConnection(url, &quot;wb001&quot;, &quot;wb001&quot;);<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;CallableStatement proc = null;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;// 调用存储过程<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;proc = conn.prepareCall(&quot;{ call PROC_ORDER(?,?,?,?,?,?) }&quot;);<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;// 设置输入参数<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;proc.setString(1, &quot;&quot;);<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;proc.setString(2, &quot;&quot;);<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;proc.setString(3, &quot;&quot;);<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;// 注册输出参数<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;proc.registerOutParameter(4, Types.VARCHAR);<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;proc.registerOutParameter(5, Types.VARCHAR);<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;proc.registerOutParameter(6, Types.INTEGER);<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;proc.execute();<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;// 输出参数1<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;String out1 = proc.getString(4);<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;System.out.println(&quot;out1=&quot;+out1);<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;// 输出参数2<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;String out2 = proc.getString(5);<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;System.out.println(&quot;out2=&quot;+out2);<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;// 输出参数3<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;String out3 = proc.getString(6);<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;System.out.println(&quot;out3=&quot;+out3);<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;} catch (Exception e) {<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;// TODO Auto-generated catch block<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;e.printStackTrace();<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;}<br />&nbsp;&nbsp; &nbsp;}<br /><br />}</p><p>--存储过程如下</p><p>create or replace procedure PROC_ORDER<br />(<br />&nbsp;&nbsp; p_username in varchar2,<br />&nbsp;&nbsp; p_bookid in varchar2,<br />&nbsp;&nbsp; p_bookname in varchar2,<br />&nbsp;&nbsp; p_uname out varchar2,<br />&nbsp;&nbsp; p_bname out varchar2,<br />&nbsp;&nbsp; p_return out integer<br />)<br />as<br />v_userid&nbsp; number(5);<br />v_uname&nbsp;&nbsp; varchar2(20);<br />v_bname&nbsp;&nbsp; varchar2(20);<br />v_bookid&nbsp; number(5);<br /><br />BEGIN<br /><br />&nbsp;&nbsp; select userinfo_seq.nextval into v_userid from dual;<br />&nbsp;&nbsp; -- 向用户表中插入数据<br />&nbsp;&nbsp; insert into userinfo<br />&nbsp;&nbsp; (<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; userid,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; username,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; telephone,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; gender,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; address<br />&nbsp;&nbsp; )<br />&nbsp;&nbsp; values<br />&nbsp;&nbsp; (<br />&nbsp;&nbsp;&nbsp;&nbsp; v_userid,<br />&nbsp;&nbsp;&nbsp;&nbsp; 'wb',<br />&nbsp;&nbsp;&nbsp;&nbsp; '13951776394',<br />&nbsp;&nbsp;&nbsp;&nbsp; '1',<br />&nbsp;&nbsp;&nbsp;&nbsp; 'aaa'<br />&nbsp;&nbsp; );<br /><br />&nbsp;&nbsp; select book_seq.nextval into v_bookid from dual;<br />&nbsp;&nbsp; insert into book<br />&nbsp;&nbsp; (<br />&nbsp;&nbsp;&nbsp;&nbsp; id,<br />&nbsp;&nbsp;&nbsp;&nbsp; bookid,<br />&nbsp;&nbsp;&nbsp;&nbsp; bookname,<br />&nbsp;&nbsp;&nbsp;&nbsp; price<br />&nbsp;&nbsp; )<br />&nbsp;&nbsp; values<br />&nbsp;&nbsp; (<br />&nbsp;&nbsp;&nbsp;&nbsp; v_bookid,<br />&nbsp;&nbsp;&nbsp;&nbsp; 'ISBN-001',<br />&nbsp;&nbsp;&nbsp;&nbsp; 'Thinking in Java',<br />&nbsp;&nbsp;&nbsp;&nbsp; 98<br />&nbsp;&nbsp; );<br /><br />&nbsp;&nbsp; select userinfo.username into p_uname from userinfo where userinfo.userid=v_userid;<br />&nbsp;&nbsp; select book.bookname into p_bname from book where book.id=v_bookid;<br />&nbsp;&nbsp; p_return :=0;<br /><br />EXCEPTION<br />WHEN OTHERS THEN<br />&nbsp; p_return:=-1;<br />&nbsp; ROLLBACK;<br />END;<br />&nbsp;</p><p>--输出结果</p><p>out1=wb<br />out2=Thinking in Java<br />out3=0</p><p>&nbsp;</p><p>--获得输出参数，一定要对应参数位置，并且要调用注册方法。</p>]]></description><category>数据库</category><comments>http://www.1314lucky.cn/post/5.html#comment</comments><wfw:comment>http://www.1314lucky.cn/</wfw:comment><wfw:commentRss>http://www.1314lucky.cn/feed.asp?cmt=5</wfw:commentRss><trackback:ping>http://www.1314lucky.cn/cmd.asp?act=tb&amp;id=5&amp;key=674433c1</trackback:ping></item></channel></rss>
