在預存程序之間傳遞資料

來源:互聯網
上載者:User

----start

    預存程序之間可以相互調用,如何在它們之間傳遞資料呢?有以下3種方法。

一:通過輸入輸出參數傳遞資料

    這是最簡單的一種方式,不過值得注意的是,預存程序中的RETURN語句和其它程式設計語言中的return語句含義是不同的。預存程序中的return語句放回sqlcode值。

二:通過會話全域變數傳遞資料

--串連資料庫<br />CONNECT TO SAMPLE!</p><p>--建立會話全域變數<br />CREATE VARIABLE MYVAR INTEGER DEFAULT 0!</p><p>--建立預存程序1<br />CREATE PROCEDURE TESTPROC1 ()<br />BEGIN<br /> SET MYVAR=10;<br />END!</p><p>--建立預存程序2<br />CREATE PROCEDURE TESTPROC2 (OUT MSG CHAR(20))<br />BEGIN<br /> CALL TESTPROC1();</p><p> IF MYVAR=10 THEN<br /> SET MSG='測試成功';<br /> ELSE<br /> SET MSG='測試失敗';<br /> END IF;<br />END!</p><p>--調用預存程序2<br />CALL TESTPROC2(?)!</p><p>--刪除預存程序<br />DROP PROCEDURE TESTPROC1!<br />DROP PROCEDURE TESTPROC2!</p><p>--關閉串連<br />CONNECT RESET! 

三:在預存程序之間傳遞遊標

 

要想在一個預存程序中使用另一個預存程序的結果集,需要以下步驟:

1、聲明一個結果集定位器:DECLARE <rs_locator_var> RESULT_SET_LOCATOR VARYING;

2、將這個結果集定位器與調用者過程相關聯:ASSOCIATE RESULT SET LOCATOR( <rs_locator_var>) WITH PROCEDURE <proc_called>;

3、分配從調用過程指向結果集的遊標:ALLOCATE <cursor> CURSOR FOR RESULT SET <rs_locator_var>;

--串連資料庫<br />CONNECT TO SAMPLE!</p><p>--建立預存程序1<br />CREATE PROCEDURE TESTPROC1 ()<br />DYNAMIC RESULT SETS 1<br />P1:BEGIN<br /> --聲明遊標<br /> DECLARE MYCUR CURSOR WITH RETURN FOR<br /> SELECT * FROM<br /> (<br /> VALUES<br /> (1),<br /> (2),<br /> (3)<br /> );<br /> --開啟遊標<br /> OPEN MYCUR;<br />END P1!</p><p>--建立預存程序2<br />CREATE PROCEDURE TESTPROC2 (OUT RES INTEGER)<br />BEGIN<br /> DECLARE SQLCODE INT DEFAULT 0;</p><p> --聲明一個結果集定位器<br /> DECLARE LOC1 RESULT_SET_LOCATOR VARYING;<br /> DECLARE X INT DEFAULT 0;</p><p> SET RES=0;<br /> CALL TESTPROC1();</p><p> --將這個結果集定位器與調用者過程相關聯<br /> ASSOCIATE RESULT SET LOCATOR(LOC1) WITH PROCEDURE TESTPROC1;</p><p> --分配從調用過程指向結果集的遊標<br /> ALLOCATE C1 CURSOR FOR RESULT SET LOC1;</p><p> FETCH FROM C1 INTO X;<br /> WHILE SQLCODE = 0 DO<br /> SET RES = RES + X;<br /> FETCH FROM C1 INTO X;<br /> END WHILE;<br />END!</p><p>--調用預存程序2<br />CALL TESTPROC2(?)!</p><p>--刪除預存程序<br />DROP PROCEDURE TESTPROC1!<br />DROP PROCEDURE TESTPROC2!</p><p>--關閉串連<br />CONNECT RESET! 

 

 

----更多參見:SQL PL 精萃

----聲明:轉載請註明出處。

----last updated on 2010.2.3

----written by ShangBo on 2010.2.3

----end

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.