鷹翔宇空

          學(xué)習(xí)和生活

          BlogJava 首頁(yè) 新隨筆 聯(lián)系 聚合 管理
            110 Posts :: 141 Stories :: 315 Comments :: 1 Trackbacks

          這段時(shí)間開(kāi)始學(xué)習(xí)寫存儲(chǔ)過(guò)程,主要原因還是因?yàn)楣ぷ餍枰?,本?lái)以為很簡(jiǎn)單的,但幾經(jīng)挫折,豪氣消磨殆盡,但總算搞通了,為了避免后來(lái)者少走彎路,特記述與此,同時(shí)亦對(duì)自己進(jìn)行鼓勵(lì)。

          一:無(wú)返回值的存儲(chǔ)過(guò)程

          存儲(chǔ)過(guò)程為:

          CREATE OR REPLACE PROCEDURE TESTA(PARA1 IN VARCHAR2,PARA2 IN VARCHAR2)  AS

          BEGIN

             INSERT INTO HYQ.B_ID (I_ID,I_NAME) VALUES (PARA1, PARA2);

          END TESTA;

          然后呢,在java里調(diào)用時(shí)就用下面的代碼:

          package com.hyq.src;

           

          import java.sql.*;

          import java.sql.ResultSet;

           

          public class TestProcedureOne {

            public TestProcedureOne() {

            }

            public static void main(String[] args ){

              String driver = "oracle.jdbc.driver.OracleDriver";

              String strUrl = "jdbc:oracle:thin:@127.0.0.1:1521: hyq ";

              Statement stmt = null;

              ResultSet rs = null;

              Connection conn = null;

              CallableStatement cstmt = null;

           

              try {

                Class.forName(driver);

                conn =  DriverManager.getConnection(strUrl, " hyq ", " hyq ");

                CallableStatement proc = null;

                proc = conn.prepareCall("{ call HYQ.TESTA(?,?) }");

                proc.setString(1, "100");

                proc.setString(2, "TestOne");

                proc.execute();

              }

              catch (SQLException ex2) {

                ex2.printStackTrace();

              }

              catch (Exception ex2) {

                ex2.printStackTrace();

              }

              finally{

                try {

                  if(rs != null){

                    rs.close();

                    if(stmt!=null){

                      stmt.close();

                    }

                    if(conn!=null){

                      conn.close();

                    }

                  }

                }

                catch (SQLException ex1) {

                }

              }

            }

          }

          當(dāng)然了,這就先要求要建張表TESTTB,里面兩個(gè)字段(I_ID,I_NAME)。

          二:有返回值的存儲(chǔ)過(guò)程(非列表)

          存儲(chǔ)過(guò)程為:

          CREATE OR REPLACE PROCEDURE TESTB(PARA1 IN VARCHAR2,PARA2 OUT VARCHAR2)  AS

          BEGIN

             SELECT INTO PARA2 FROM TESTTB WHERE I_ID= PARA1;

          END TESTB;

          java里調(diào)用時(shí)就用下面的代碼:

          package com.hyq.src;

           

          public class TestProcedureTWO {

            public TestProcedureTWO() {

            }

            public static void main(String[] args ){

              String driver = "oracle.jdbc.driver.OracleDriver";

              String strUrl = "jdbc:oracle:thin:@127.0.0.1:1521:hyq";

              Statement stmt = null;

              ResultSet rs = null;

              Connection conn = null;

              try {

                Class.forName(driver);

                conn =  DriverManager.getConnection(strUrl, " hyq ", " hyq ");

                CallableStatement proc = null;

                proc = conn.prepareCall("{ call HYQ.TESTB(?,?) }");

                proc.setString(1, "100");

                proc.registerOutParameter(2, Types.VARCHAR);

                proc.execute();

                String testPrint = proc.getString(2);

                System.out.println("=testPrint=is="+testPrint);

              }

              catch (SQLException ex2) {

                ex2.printStackTrace();

              }

              catch (Exception ex2) {

                ex2.printStackTrace();

              }

              finally{

                try {

                  if(rs != null){

                    rs.close();

                    if(stmt!=null){

                      stmt.close();

                    }

                    if(conn!=null){

                      conn.close();

                    }

                  }

                }

                catch (SQLException ex1) {

                }

              }

            }

          }

           

          }

          注意,這里的proc.getString(2)中的數(shù)值2并非任意的,而是和存儲(chǔ)過(guò)程中的out列對(duì)應(yīng)的,如果out是在第一個(gè)位置,那就是proc.getString(1),如果是第三個(gè)位置,就是proc.getString(3),當(dāng)然也可以同時(shí)有多個(gè)返回值,那就是再多加幾個(gè)out參數(shù)了。

          三:返回列表

          由于oracle存儲(chǔ)過(guò)程沒(méi)有返回值,它的所有返回值都是通過(guò)out參數(shù)來(lái)替代的,列表同樣也不例外,但由于是集合,所以不能用一般的參數(shù),必須要用pagkage.所以要分兩部分,

          1,  建一個(gè)程序包。如下:

          CREATE OR REPLACE PACKAGE TESTPACKAGE  AS

           TYPE Test_CURSOR IS REF CURSOR;

          end TESTPACKAGE;

          2,建立存儲(chǔ)過(guò)程,存儲(chǔ)過(guò)程為:

          CREATE OR REPLACE PROCEDURE TESTC(p_CURSOR out TESTPACKAGE.Test_CURSOR) IS

          BEGIN

              OPEN p_CURSOR FOR SELECT * FROM HYQ.TESTTB;

          END TESTC;

          可以看到,它是把游標(biāo)(可以理解為一個(gè)指針),作為一個(gè)out 參數(shù)來(lái)返回值的。

          java里調(diào)用時(shí)就用下面的代碼:

          package com.hyq.src;

          import java.sql.*;

          import java.io.OutputStream;

          import java.io.Writer;

          import java.sql.PreparedStatement;

          import java.sql.ResultSet;

          import oracle.jdbc.driver.*;

           

           

          public class TestProcedureTHREE {

            public TestProcedureTHREE() {

            }

            public static void main(String[] args ){

              String driver = "oracle.jdbc.driver.OracleDriver";

              String strUrl = "jdbc:oracle:thin:@127.0.0.1:1521:hyq";

              Statement stmt = null;

              ResultSet rs = null;

              Connection conn = null;

           

              try {

                Class.forName(driver);

                conn =  DriverManager.getConnection(strUrl, "hyq", "hyq");

           

                CallableStatement proc = null;

                proc = conn.prepareCall("{ call hyq.testc(?) }");

                proc.registerOutParameter(1,oracle.jdbc.OracleTypes.CURSOR);

                proc.execute();

                rs = (ResultSet)proc.getObject(1);

           

                while(rs.next())

                {

                    System.out.println("<tr><td>" + rs.getString(1) + "</td><td>"+rs.getString(2)+"</td></tr>");

                }

              }

              catch (SQLException ex2) {

                ex2.printStackTrace();

              }

              catch (Exception ex2) {

                ex2.printStackTrace();

              }

              finally{

                try {

                  if(rs != null){

                    rs.close();

                    if(stmt!=null){

                      stmt.close();

                    }

                    if(conn!=null){

                      conn.close();

                    }

                  }

                }

                catch (SQLException ex1) {

                }

              }

            }

          }

          在這里要注意,在執(zhí)行前一定要先把oracle的驅(qū)動(dòng)包放到class路徑里,否則會(huì)報(bào)錯(cuò)的。

          如果有什么問(wèn)題呢,可以和我聯(lián)系hnlyhyq@163.com;qq:77542728.

          我的心愿,愿中國(guó)的程序員早日達(dá)到世界水平,領(lǐng)先世界科技。

          posted on 2005-12-13 11:05 TrampEagle 閱讀(86496) 評(píng)論(100)  編輯  收藏 所屬分類: 學(xué)習(xí)體會(huì)

          Feedback

          # re: 用java調(diào)用oracle存儲(chǔ)過(guò)程總結(jié) 2005-12-26 17:35 江波
          謝謝,,  回復(fù)  更多評(píng)論
            

          # re: 用java調(diào)用oracle存儲(chǔ)過(guò)程總結(jié) 2005-12-26 17:36 江波
          你能不能加我,,,我們共同學(xué)習(xí)哈。。
          42401916  回復(fù)  更多評(píng)論
            

          # re: 用java調(diào)用oracle存儲(chǔ)過(guò)程總結(jié) 2005-12-28 08:28 TrampEagle
          這本就是個(gè)相互交流學(xué)習(xí)的平臺(tái),所以不用客氣的。你當(dāng)然可以成為我的好友的,共同學(xué)習(xí),共同努力!  回復(fù)  更多評(píng)論
            

          # re: 用java調(diào)用oracle存儲(chǔ)過(guò)程總結(jié) 2006-01-09 09:36 張偉
          收益良多,十分感謝;希望能成為好友,共同學(xué)習(xí)進(jìn)步!qq:349477837  回復(fù)  更多評(píng)論
            

          # re: 用java調(diào)用oracle存儲(chǔ)過(guò)程總結(jié) 2006-01-10 14:02 ice
          垃圾代碼
          中國(guó)怎么有這么多的垃圾程序員,去死吧 還希望早日達(dá)到世界水平 笑話!  回復(fù)  更多評(píng)論
            

          # re: 用java調(diào)用oracle存儲(chǔ)過(guò)程總結(jié) 2006-01-10 14:29 TrampEagle
          TO ice:
          首先向你致歉,可能這些代碼沒(méi)有使你能夠如愿正常進(jìn)行你的工作;
          其次,我想聲明一點(diǎn),這里的代碼只是介紹一種方法,提供一種途徑,我的本意是為自己做筆記的,其次才是能不能為他人做點(diǎn)貢獻(xiàn),所以有的地方可能不太完善,為自己的做法致歉。
          但是,通過(guò)謾罵就能解決問(wèn)題嗎?既然這方面,我們存在溝壑,我們就應(yīng)該好好溝通一下,對(duì)你我想也不會(huì)有壞處的。如果你有什么問(wèn)題,可以通過(guò)我的聯(lián)系方式同我聯(lián)系!  回復(fù)  更多評(píng)論
            

          # re: 用java調(diào)用oracle存儲(chǔ)過(guò)程總結(jié) 2006-01-12 11:43 ryan
          我也研究Java調(diào)Oracle Store Procedure一段時(shí)間,發(fā)現(xiàn)一些問(wèn)題
          主要是Open 的Cursor不會(huì)釋放,v$open_cursor只增長(zhǎng)不減少,最后服務(wù)器只能重起。
          希望能交流。QQ:22828569  回復(fù)  更多評(píng)論
            

          # re: 用java調(diào)用oracle存儲(chǔ)過(guò)程總結(jié) 2006-03-10 16:41 Janson
          你的文章發(fā)布的真是太好了!我找這方面的例子已經(jīng)一個(gè)星期了,終于在你這能夠執(zhí)行了,呵呵,從此我也可以練習(xí)使用oracle的存儲(chǔ)過(guò)程了。哥們,真的謝了!  回復(fù)  更多評(píng)論
            

          # re: 用java調(diào)用oracle存儲(chǔ)過(guò)程總結(jié) 2006-03-10 21:51 TrampEagle
          @Janson
          能幫上你的小忙是我萬(wàn)分的榮幸,呵呵!
          其實(shí),我學(xué)習(xí)存儲(chǔ)過(guò)程時(shí),就是因?yàn)檎也坏竭@方面的完整例子花費(fèi)了不少時(shí)間,所以記于此,一是作筆記,另外給需要這方面知識(shí)的朋友提供一份參考,使他們少走一些彎路。
          希望大家都能把自己的一些心得體會(huì)發(fā)布出來(lái),互相幫助,共同進(jìn)步!  回復(fù)  更多評(píng)論
            

          # re: 用java調(diào)用oracle存儲(chǔ)過(guò)程總結(jié) 2006-03-28 14:39 ajian005
          可以少走彎路 , 謝謝 !  回復(fù)  更多評(píng)論
            

          # re: 用java調(diào)用oracle存儲(chǔ)過(guò)程總結(jié) 2006-05-29 18:13 TrampEagle
          補(bǔ)充一個(gè)使用oracle存儲(chǔ)過(guò)程分頁(yè)的小例子:
          1, 建一個(gè)程序包。如下:

          CREATE OR REPLACE PACKAGE TESTPACKAGE AS

          TYPE Test_CURSOR IS REF CURSOR;

          end TESTPACKAGE;

          2,建立存儲(chǔ)過(guò)程,存儲(chǔ)過(guò)程為:


          create or replace procedure TESTC(p_CURSOR out TESTPACKAGE.Test_CURSOR,lowerNum in numeric,higherNum in numeric) is
          begin
          OPEN p_CURSOR FOR select * from ( select row_.*, rownum rownum_ from (select id,title,status from HYQTEST) row_ where rownum <= higherNum) where rownum_ >lowerNum;
          end TESTC;

          使用plsql測(cè)試:
          declare
          lowerNum integer;
          higherNum integer;
          id varchar2(10);
          title varchar2(500);
          status numeric;
          c testpackage.Test_CURSOR;
          rownum_ integer;
          begin
          lowerNum:=1;
          higherNum:=10;
          TESTC(c,lowerNum,higherNum);
          LOOP
          FETCH c INTO id,title,status,rownum_;
          EXIT WHEN c%NOTFOUND;
          DBMS_OUTPUT.PUT_LINE('=行號(hào)='||rownum_||'=='||id||'==='||title||'===='||status||'==');
          END LOOP;
          CLOSE c;

          end;

            回復(fù)  更多評(píng)論
            

          # re: 用java調(diào)用oracle存儲(chǔ)過(guò)程總結(jié) 2006-07-12 13:18 yclc
          似乎使用cStmt.getResultSet() 可以直接獲取procedure中執(zhí)行過(guò)的select  回復(fù)  更多評(píng)論
            

          # re: 用java調(diào)用oracle存儲(chǔ)過(guò)程總結(jié) 2006-08-09 09:43 wu
          呵呵~我也找了挺長(zhǎng)時(shí)間了,正好用上,謝謝 a lot 了哈哈。  回復(fù)  更多評(píng)論
            

          # re: 用java調(diào)用oracle存儲(chǔ)過(guò)程總結(jié) 2006-08-14 10:43 才子
          謝謝你了,大哥  回復(fù)  更多評(píng)論
            

          # re: 用java調(diào)用oracle存儲(chǔ)過(guò)程總結(jié) 2006-08-23 17:25 不斷學(xué)習(xí)是責(zé)任
          謝謝了,受益不少.  回復(fù)  更多評(píng)論
            

          # re: 用java調(diào)用oracle存儲(chǔ)過(guò)程總結(jié) 2006-09-29 17:13 coldiced
          謝謝幫助,支持樓主!鄙視牛人!  回復(fù)  更多評(píng)論
            

          # re: 用java調(diào)用oracle存儲(chǔ)過(guò)程總結(jié) 2006-10-31 19:46 zdl
          應(yīng)該好好學(xué)習(xí),支持下樓主  回復(fù)  更多評(píng)論
            

          # re: 用java調(diào)用oracle存儲(chǔ)過(guò)程總結(jié) 2006-11-25 11:02
          頂一下  回復(fù)  更多評(píng)論
            

          # re: 用java調(diào)用oracle存儲(chǔ)過(guò)程總結(jié) 2006-12-14 11:44 ipxzerg
          樣例的技術(shù)含量和代碼的水平有待提高,不過(guò)還是支持一下,希望樓主加強(qiáng)學(xué)習(xí)。  回復(fù)  更多評(píng)論
            

          # re: 用java調(diào)用oracle存儲(chǔ)過(guò)程總結(jié) 2006-12-23 23:37 vally
          太感謝了,正急需這倆方面的信息,今天一找就給全部找到了!希望樓主能多發(fā)布些好資料呀!  回復(fù)  更多評(píng)論
            

          # re: 用java調(diào)用oracle存儲(chǔ)過(guò)程總結(jié) 2007-02-14 14:07 在線視頻
          不錯(cuò),3種情況都介紹了  回復(fù)  更多評(píng)論
            

          # re: 用java調(diào)用oracle存儲(chǔ)過(guò)程總結(jié) 2007-03-30 13:34 fdfd
          dffdfddff  回復(fù)  更多評(píng)論
            

          # re: 用java調(diào)用oracle存儲(chǔ)過(guò)程總結(jié) 2007-03-30 14:11 aa
          中國(guó)程序員什么 時(shí)候才到世界水平呢?難,少  回復(fù)  更多評(píng)論
            

          # re: 用java調(diào)用oracle存儲(chǔ)過(guò)程總結(jié) 2007-04-27 14:16 sd
          加油  回復(fù)  更多評(píng)論
            

          # re: 用java調(diào)用oracle存儲(chǔ)過(guò)程總結(jié) 2007-05-10 15:28 Laurence.Lee
          up!
          up!
          Thanks a lot!  回復(fù)  更多評(píng)論
            

          # re: 用java調(diào)用oracle存儲(chǔ)過(guò)程總結(jié) 2007-05-22 11:54 ade
          謝謝分享!  回復(fù)  更多評(píng)論
            

          # re: 用java調(diào)用oracle存儲(chǔ)過(guò)程總結(jié) 2007-06-04 11:28 學(xué)習(xí)ing
          頂以下  回復(fù)  更多評(píng)論
            

          # re: 用java調(diào)用oracle存儲(chǔ)過(guò)程總結(jié) 2007-07-13 11:24 huraky
          謝謝樓主,收益不少!  回復(fù)  更多評(píng)論
            

          # re: 用java調(diào)用oracle存儲(chǔ)過(guò)程總結(jié) 2007-07-17 17:24 zbc
          真的寫得很好..
          是個(gè)學(xué)習(xí)的好例子.  回復(fù)  更多評(píng)論
            

          # re: 用java調(diào)用oracle存儲(chǔ)過(guò)程總結(jié)[未登錄](méi) 2007-07-22 00:43
          非常感謝樓主,我找這樣的例子找了好久,我原來(lái)用sqlserver,現(xiàn)轉(zhuǎn)oracle,兩者差別太大,在sqlserver中輕松能搞定的存儲(chǔ)過(guò)程在oracle中有點(diǎn)束手無(wú)冊(cè)了,查了很多資料,也沒(méi)搞明白,看了你的例子,受益非淺,可以加你的QQ不,我的QQ:663535631

            回復(fù)  更多評(píng)論
            

          # re: 用java調(diào)用oracle存儲(chǔ)過(guò)程總結(jié) 2007-08-14 16:35 bai
          總結(jié)得很好
          頂?。?!  回復(fù)  更多評(píng)論
            

          # re: 用java調(diào)用oracle存儲(chǔ)過(guò)程總結(jié) 2007-08-26 18:16 可可
          不錯(cuò)啊  回復(fù)  更多評(píng)論
            

          # re: 用java調(diào)用oracle存儲(chǔ)過(guò)程總結(jié) 2007-09-07 14:33 little star
          特別鄙視哪個(gè)說(shuō)話垃圾的.
          我覺(jué)得樓主很不錯(cuò)的,把自己做出來(lái)的東西跟大家一起分享,雖然這個(gè)代碼簡(jiǎn)單了點(diǎn),但也有很多人看到后受到啟發(fā).在國(guó)內(nèi)做東西,每個(gè)人的思路都不一樣,實(shí)現(xiàn)的方式也可能不一樣,象你那樣說(shuō)完全沒(méi)有必要,你覺(jué)得不合適你,你可以不看.  回復(fù)  更多評(píng)論
            

          # re: 用java調(diào)用oracle存儲(chǔ)過(guò)程總結(jié) 2007-09-18 13:41 饒志華
          謝謝分享  回復(fù)  更多評(píng)論
            

          # re: 用java調(diào)用oracle存儲(chǔ)過(guò)程總結(jié) 2007-10-10 17:49 Roger Gao
          數(shù)據(jù)類型是table,元素類型是Record的存儲(chǔ)過(guò)程調(diào)用過(guò)嗎?  回復(fù)  更多評(píng)論
            

          # re: 用java調(diào)用oracle存儲(chǔ)過(guò)程總結(jié) 2007-11-10 16:26 123
          能用存儲(chǔ)過(guò)程操作文件嗎 能用oracle調(diào)用java程序刪除文件嗎 有的話 請(qǐng)說(shuō)出來(lái) 共同研究 你的文章很有用   回復(fù)  更多評(píng)論
            

          # re: 用java調(diào)用oracle存儲(chǔ)過(guò)程總結(jié)[未登錄](méi) 2007-12-28 16:52 jedi
          多謝,轉(zhuǎn)到偶的BLOG上收藏了  回復(fù)  更多評(píng)論
            

          # re: 用java調(diào)用oracle存儲(chǔ)過(guò)程總結(jié) 2008-03-18 19:45 gma
          @ice
          你寫一個(gè)不垃圾的給瞧瞧!  回復(fù)  更多評(píng)論
            

          # re: 用java調(diào)用oracle存儲(chǔ)過(guò)程總結(jié) 2008-03-24 11:39 Irene
          正好我也要學(xué)習(xí)存儲(chǔ)過(guò)程,感謝lz  回復(fù)  更多評(píng)論
            

          # re: 用java調(diào)用oracle存儲(chǔ)過(guò)程總結(jié) 2008-03-31 11:59 hao
          我剛開(kāi)始學(xué)存儲(chǔ)過(guò)程,多謝啦!  回復(fù)  更多評(píng)論
            

          # re: 用java調(diào)用oracle存儲(chǔ)過(guò)程總結(jié)[未登錄](méi) 2008-04-01 09:47 aa
          你他媽的狗屎,不要亂說(shuō)別人的代碼不好,有本領(lǐng)把你寫的share出來(lái),自己寫不出嗎還說(shuō)別人是垃圾,我看你才是垃圾中的極品  回復(fù)  更多評(píng)論
            

          # re: 用java調(diào)用oracle存儲(chǔ)過(guò)程總結(jié) 2008-04-16 21:28 yangyi
          你寫的太好了
          能否加我啊
          QQ 465937187  回復(fù)  更多評(píng)論
            

          # re: 用java調(diào)用oracle存儲(chǔ)過(guò)程總結(jié) 2008-04-25 00:00 man
          說(shuō)點(diǎn)題外話,你的文章咬文嚼字的,閑詞廢話和語(yǔ)病很多,希望你盡量用平實(shí)直接的表達(dá)方式。  回復(fù)  更多評(píng)論
            

          # re: 用java調(diào)用oracle存儲(chǔ)過(guò)程總結(jié) 2008-05-13 23:05 xlx
          謝謝  回復(fù)  更多評(píng)論
            

          # re: 用java調(diào)用oracle存儲(chǔ)過(guò)程總結(jié) 2008-05-21 14:39 hello
          為什么我按上面做的,數(shù)據(jù)庫(kù)表里面沒(méi)有數(shù)據(jù)啊  回復(fù)  更多評(píng)論
            

          # re: 用java調(diào)用oracle存儲(chǔ)過(guò)程總結(jié)[未登錄](méi) 2008-05-28 15:26 Jerry
          感謝樓主  回復(fù)  更多評(píng)論
            

          # re: 用java調(diào)用oracle存儲(chǔ)過(guò)程總結(jié) 2008-06-26 20:27 杰杰
          非常感謝  回復(fù)  更多評(píng)論
            

          # re: 用java調(diào)用oracle存儲(chǔ)過(guò)程總結(jié) 2008-07-26 12:29 開(kāi)發(fā)者
          寫的還不錯(cuò)。支持樓主,鄙視那個(gè)說(shuō)臟話的。  回復(fù)  更多評(píng)論
            

          # re: 用java調(diào)用oracle存儲(chǔ)過(guò)程總結(jié)[未登錄](méi) 2008-07-29 09:17 aa
          你個(gè)只會(huì)說(shuō)垃圾的傻B  回復(fù)  更多評(píng)論
            

          # re: 用java調(diào)用oracle存儲(chǔ)過(guò)程總結(jié)[未登錄](méi) 2008-08-05 16:45 飛飛
          @ice
          你媽B你有本事你自己寫一個(gè)出來(lái),人家寫的不好至少人家給大家分享了,我想大家共同討論才有助于共同提升中國(guó)程序員的整體水平吧,你在這兒瞎扯淡有用嗎?
          還是為了顯示自己很牛B???  回復(fù)  更多評(píng)論
            

          # re: 用java調(diào)用oracle存儲(chǔ)過(guò)程總結(jié) 2008-08-06 23:09 風(fēng)中青竹
          不錯(cuò),寫得挺詳細(xì)哦!!!

          謝謝了??!  回復(fù)  更多評(píng)論
            

          # re: 用java調(diào)用oracle存儲(chǔ)過(guò)程總結(jié) 2008-08-19 14:23 afda
          我靠,終于可以運(yùn)行了。不錯(cuò)。  回復(fù)  更多評(píng)論
            

          # re: 用java調(diào)用oracle存儲(chǔ)過(guò)程總結(jié) 2008-08-28 20:24 wandao
          請(qǐng)問(wèn):一:無(wú)返回值的存儲(chǔ)過(guò)程中 HYQ.B_ID , HYQ是什么,B_ID 是什么?謝謝!!  回復(fù)  更多評(píng)論
            

          # re: 用java調(diào)用oracle存儲(chǔ)過(guò)程總結(jié)[未登錄](méi) 2008-08-28 21:00 呵呵
          我在oracle 9i 的 isqlplus 中運(yùn)行 :
          CREATE OR REPLACE PROCEDURE TESTB(PARA1 IN VARCHAR2,PARA2 OUT VARCHAR2) AS
          BEGIN
          SELECT INTO PARA2 FROM TESTTB WHERE I_ID= PARA1;
          END TESTB;
          老報(bào)錯(cuò)怎么回事?TESTTB 我也建了  回復(fù)  更多評(píng)論
            

          # re: 用java調(diào)用oracle存儲(chǔ)過(guò)程總結(jié) 2008-09-23 15:32 octopus754
          "ice" 同學(xué),通常情況下,高手是會(huì)尊重任何人的勞動(dòng)成果的.  回復(fù)  更多評(píng)論
            

          # re: 用java調(diào)用oracle存儲(chǔ)過(guò)程總結(jié)[未登錄](méi) 2008-10-08 13:34 紅狼
          樓主好樣的!  回復(fù)  更多評(píng)論
            

          # re: 用java調(diào)用oracle存儲(chǔ)過(guò)程總結(jié) 2008-10-16 17:01 hoho
          非常感謝! 學(xué)習(xí)了  回復(fù)  更多評(píng)論
            

          # re: 用java調(diào)用oracle存儲(chǔ)過(guò)程總結(jié) 2008-10-23 08:53
          謝謝  回復(fù)  更多評(píng)論
            

          # re: 用java調(diào)用oracle存儲(chǔ)過(guò)程總結(jié) 2008-10-26 19:16 虎虎
          太好了
            回復(fù)  更多評(píng)論
            

          # re: 用java調(diào)用oracle存儲(chǔ)過(guò)程總結(jié) 2008-11-28 15:12 linyupei
          我已經(jīng)加你QQ了 有問(wèn)題請(qǐng)教要回復(fù)哦!
          真的挺好的  回復(fù)  更多評(píng)論
            

          # re: 用java調(diào)用oracle存儲(chǔ)過(guò)程總結(jié) 2009-01-06 22:11 大雨
          很好,學(xué)習(xí)了,不管怎樣都要努力!樓主肯分享真是太好了,大家都是中國(guó)人,又都是學(xué)程序的,不要罵來(lái)罵去了。  回復(fù)  更多評(píng)論
            

          # re: 用java調(diào)用oracle存儲(chǔ)過(guò)程總結(jié) 2009-01-14 18:24 123
          mark  回復(fù)  更多評(píng)論
            

          # re: 用java調(diào)用oracle存儲(chǔ)過(guò)程總結(jié)[未登錄](méi) 2009-02-03 17:43 aa
          很好 很常久都帖子啊  回復(fù)  更多評(píng)論
            

          # re: 用java調(diào)用oracle存儲(chǔ)過(guò)程總結(jié) 2009-02-25 21:12 ICC
          謝謝了。  回復(fù)  更多評(píng)論
            

          # re: 用java調(diào)用oracle存儲(chǔ)過(guò)程總結(jié) 2009-03-10 14:02 夢(mèng)想
          你提供的例子對(duì)我?guī)椭艽螅浅8兄x!
          愿中國(guó)的程序員早日達(dá)到世界水平,領(lǐng)先世界科技。
            回復(fù)  更多評(píng)論
            

          # re: 用java調(diào)用oracle存儲(chǔ)過(guò)程總結(jié) 2009-03-13 13:37 copper
          謝謝了,寫的相當(dāng)不錯(cuò),支持樓主。  回復(fù)  更多評(píng)論
            

          # re: 用java調(diào)用oracle存儲(chǔ)過(guò)程總結(jié) 2009-04-04 22:57 小蛇
          謝謝樓主分享, 對(duì)java調(diào)用的oracle procedure的介紹很簡(jiǎn)潔,適合快速入門。
          要知道這篇貼子的主要目的是介紹基本技術(shù),不是什么程序設(shè)計(jì)技巧和架構(gòu)。
          我沒(méi)看出來(lái)哪點(diǎn)垃圾,@ice其實(shí)才是一垃圾,是豬,是傻B。  回復(fù)  更多評(píng)論
            

          # re: 用java調(diào)用oracle存儲(chǔ)過(guò)程總結(jié) 2009-04-27 18:46 hu
          多謝樓主!  回復(fù)  更多評(píng)論
            

          # re: 用java調(diào)用oracle存儲(chǔ)過(guò)程總結(jié) 2009-06-11 10:12 驛陸♂湮華↘
          java調(diào)用我明白,可是在PL/SQL中怎么用call語(yǔ)句調(diào)用含out參數(shù)的存儲(chǔ)過(guò)程,弄了半天也不取不出來(lái)參數(shù)值,如果LZ知道,告知一下,謝謝!  回復(fù)  更多評(píng)論
            

          # re: 用java調(diào)用oracle存儲(chǔ)過(guò)程總結(jié) 2009-07-03 13:55 xiao
          proc.registerOutParameter(1,oracle.jdbc.OracleTypes.CURSOR);  回復(fù)  更多評(píng)論
            

          # re: 用java調(diào)用oracle存儲(chǔ)過(guò)程總結(jié) 2009-07-03 15:38 nc000
          proc.registerOutParameter(1,oracle.jdbc.OracleTypes.CURSOR); 中的1是指什么,麻煩給說(shuō)明一下  回復(fù)  更多評(píng)論
            

          # re: 用java調(diào)用oracle存儲(chǔ)過(guò)程總結(jié) 2010-03-09 14:59 tyzqqq123=163.com
          寫的好,清晰而簡(jiǎn)約,有國(guó)外技術(shù)文章的風(fēng)格。
          其實(shí)簡(jiǎn)約而不簡(jiǎn)單的程序更能體現(xiàn)出水平,寫的看上去很“難”有不代表技術(shù)就好。
          樓主的想法很好,應(yīng)該好好鼓勵(lì)樓主,應(yīng)該向老外學(xué)習(xí),不應(yīng)該總是一串串罵語(yǔ)。
          我想大家互相鼓勵(lì),相互尊重,中國(guó)的程序員一定很快達(dá)到世界水平.  回復(fù)  更多評(píng)論
            

          # re: 用java調(diào)用oracle存儲(chǔ)過(guò)程總結(jié)[未登錄](méi) 2010-03-17 12:58 過(guò)客
          寫的很好,希望像LZ的 人 越來(lái)越多,不過(guò)提個(gè)建議啊 ,效率還是要考慮下 ,呵呵  回復(fù)  更多評(píng)論
            

          # re: 用java調(diào)用oracle存儲(chǔ)過(guò)程總結(jié) 2010-03-22 14:20
          加我把,,,我建議還是建一個(gè)群交流~373769658  回復(fù)  更多評(píng)論
            

          # re: 用java調(diào)用oracle存儲(chǔ)過(guò)程總結(jié)[未登錄](méi) 2010-03-31 14:51 fg
          真是ice@ice
            回復(fù)  更多評(píng)論
            

          # re: 用java調(diào)用oracle存儲(chǔ)過(guò)程總結(jié)[未登錄](méi) 2010-09-20 09:51 hong
          樓主寫的棒,總結(jié)的棒,如果中國(guó)的程序員都有這樣的想法和素質(zhì),我想我們國(guó)家的程序水平會(huì)有質(zhì)的飛躍。雖然罵人是不對(duì)的,但是我覺(jué)得樓上的那個(gè)ice才是個(gè)垃圾,鄙視那個(gè)罵人的傻B!  回復(fù)  更多評(píng)論
            

          # re: 用java調(diào)用oracle存儲(chǔ)過(guò)程總結(jié) 2011-05-03 11:28
          非常感謝。  回復(fù)  更多評(píng)論
            

          # re: 用java調(diào)用oracle存儲(chǔ)過(guò)程總結(jié)[未登錄](méi) 2011-07-14 20:22 xxx
          niu bi 文檔?。?!  回復(fù)  更多評(píng)論
            

          # re: 用java調(diào)用oracle存儲(chǔ)過(guò)程總結(jié) 2011-07-20 15:03 請(qǐng)教
          樓主,我想問(wèn)一下,當(dāng)使用游標(biāo)獲取了結(jié)果集后,如何關(guān)閉游標(biāo)?還是不需要關(guān)閉,調(diào)用完畢后自動(dòng)會(huì)釋放的?  回復(fù)  更多評(píng)論
            

          # re: 用java調(diào)用oracle存儲(chǔ)過(guò)程總結(jié)[未登錄](méi) 2012-03-23 14:52 wu
          頂下  回復(fù)  更多評(píng)論
            

          # re: 用java調(diào)用oracle存儲(chǔ)過(guò)程總結(jié) 2012-04-12 23:52 lujb
          我想問(wèn)一下,怎么實(shí)現(xiàn)ORACLE的JAVA調(diào)用存儲(chǔ)過(guò)程,實(shí)現(xiàn)多線程?

          import java.sql.*;
          import java.sql.ResultSet;
          import oracle.jdbc.*;

          public class HistoryDataMove
          {

          public static void main(String[] args) {
          //System.out.println("11111");
          HistoryDataMove schedualed = new HistoryDataMove();
          schedualed.action();
          }

          class RunHandle0 implements Runnable {
          private OracleJavaProc proc = null;
          private String procName = "test";

          RunHandle0(String procName) {
          this.procName = procName;
          this.proc = new OracleJavaProc();
          }

          public void run() {
          try {
          System.out.println(procName);
          proc.procStartup(procName);
          } catch (Exception e) {
          e.printStackTrace();
          }
          }
          }

          public class OracleJavaProc {

          public void procStartup(String procName) {
          Connection conn = null;
          try {
          conn = DriverManager.getConnection("jdbc:default:connection:");

          CallableStatement proc = null;
          proc = conn.prepareCall("{call " + procName + "()}");
          proc.execute();
          }
          catch (Exception ex2) {
          ex2.printStackTrace();
          }
          finally{
          try {
          if(conn!=null){
          conn.close();
          }
          }
          catch (SQLException ex1) {
          }
          }
          }
          }
          public void action() {
          RunHandle0 t1 = new RunHandle0("HISDATA_MOVE.test");
          Thread thread1 = new Thread(t1);
          thread1.start();
          RunHandle0 t2 = new RunHandle0("HISDATA_MOVE.test1");
          Thread thread2 = new Thread(t2);
          thread2.start();
          }
          }

          我在myeclipse可以實(shí)現(xiàn)多線程,但在ORACLE那,只能是單線程順線執(zhí)行
          望回復(fù):lujbmail@163.com  回復(fù)  更多評(píng)論
            

          # re: 用java調(diào)用oracle存儲(chǔ)過(guò)程總結(jié) 2012-09-10 21:03 路人甲乙丙
          樓主。。你那個(gè)返回列表,就是輸出參數(shù)是游標(biāo)的, 調(diào)用存儲(chǔ)存過(guò)程,不關(guān)閉游標(biāo)? 好像這是不允許的,所以存諸返回結(jié)果集,然后在JAVA 中調(diào)用,這樣的寫法不合理,會(huì)被領(lǐng)導(dǎo)罵啊。。 有沒(méi)有更好的方法呢?  回復(fù)  更多評(píng)論
            

          # re: 用java調(diào)用oracle存儲(chǔ)過(guò)程總結(jié) 2012-11-10 15:28 菩提
          @ice
          賤人年年有,今年何其多啊??!
            回復(fù)  更多評(píng)論
            

          # re: 用java調(diào)用oracle存儲(chǔ)過(guò)程總結(jié) 2012-12-04 14:26 費(fèi)華樂(lè)
          總結(jié)的很好,面試官就問(wèn)我java怎么調(diào)用存儲(chǔ)過(guò)程。
          我沒(méi)回答上來(lái)??戳四愕目偨Y(jié),清楚多了,謝謝!!!  回復(fù)  更多評(píng)論
            

          # re: 用java調(diào)用oracle存儲(chǔ)過(guò)程總結(jié)[未登錄](méi) 2012-12-17 16:12 DDD
          SELECT TESTTB.什么 INTO PARA2 FROM TESTTB WHERE I_ID= PARA1; @呵呵  回復(fù)  更多評(píng)論
            

          # re: 用java調(diào)用oracle存儲(chǔ)過(guò)程總結(jié)[未登錄](méi) 2012-12-24 16:00 jac
          call HYB.TESTA(?,?)
          這部分是什么啊  回復(fù)  更多評(píng)論
            

          # re: 用java調(diào)用oracle存儲(chǔ)過(guò)程總結(jié)[未登錄](méi) 2013-03-24 12:21 ZW
          終于找到個(gè)我這種菜鳥(niǎo)能看懂的代碼啦,雪中送炭呀.頂  回復(fù)  更多評(píng)論
            

          # re: 用java調(diào)用oracle存儲(chǔ)過(guò)程總結(jié)[未登錄](méi) 2013-04-01 17:17 tim
          樓主,我想問(wèn)個(gè)問(wèn)題。我一直不知道你在開(kāi)頭寫的這段
          CREATE OR REPLACE PROCEDURE TESTA(PARA1 IN VARCHAR2,PARA2 IN VARCHAR2) AS

          BEGIN

          INSERT INTO HYQ.B_ID (I_ID,I_NAME) VALUES (PARA1, PARA2);

          END TESTA;

          這些sql寫在哪里?。课以陧?xiàng)目里要放在什么地方?這個(gè)問(wèn)題很困惑我!求助!
            回復(fù)  更多評(píng)論
            

          # re: 用java調(diào)用oracle存儲(chǔ)過(guò)程總結(jié) 2013-04-10 17:32 hahaWOshiwho

          @tim寫在PLsql developer上吧?或者oracle上?在數(shù)據(jù)庫(kù)上寫存儲(chǔ)過(guò)程,然后用java調(diào)用.
            回復(fù)  更多評(píng)論
            

          # re: 用java調(diào)用oracle存儲(chǔ)過(guò)程總結(jié)[未登錄](méi) 2013-05-14 16:22 xiaoyu
          @tim
          這段肯定是放在數(shù)據(jù)庫(kù)里的啊,存儲(chǔ)過(guò)程就是保存在數(shù)據(jù)庫(kù)的一段代碼。  回復(fù)  更多評(píng)論
            

          # re: 用java調(diào)用oracle存儲(chǔ)過(guò)程總結(jié) 2013-06-13 18:22 chester
          請(qǐng)問(wèn)樓主 p_CURSOR 是什么?  回復(fù)  更多評(píng)論
            

          # re: 用java調(diào)用oracle存儲(chǔ)過(guò)程總結(jié) 2013-06-20 10:47 手酸死
          @ice
          你個(gè)sb,兒子。你寫的出來(lái)?  回復(fù)  更多評(píng)論
            

          # re: 用java調(diào)用oracle存儲(chǔ)過(guò)程總結(jié)[未登錄](méi) 2013-06-20 15:19 111
          @ice
          說(shuō)實(shí)話代碼沒(méi)細(xì)看 但是看到你說(shuō)話 我不鎮(zhèn)定了。 為什么美好的生活中總有你這種傻逼。 你是不以為你自己代表中國(guó)最先進(jìn)的生產(chǎn)力了。 達(dá)不到先進(jìn)就是有你這種垃圾  回復(fù)  更多評(píng)論
            

          # re: 用java調(diào)用oracle存儲(chǔ)過(guò)程總結(jié) 2013-07-26 16:38 黑貓
          樓主,我在pl/sql中寫
          CREATE OR REPLACE PROCEDURE TESTA(PARA1 IN VARCHAR2,PARA2 IN VARCHAR2) AS

          BEGIN

          INSERT INTO HYQ.B_ID (I_ID,I_NAME) VALUES (PARA1, PARA2);

          END TESTA;
          運(yùn)行程序是總是報(bào)java.sql.SQLException: ORA-06550: 第 1 行, 第 7 列:
          PLS-00201: 必須聲明標(biāo)識(shí)符 'HYQ.TESTA'錯(cuò)誤  回復(fù)  更多評(píng)論
            

          # re: 用java調(diào)用oracle存儲(chǔ)過(guò)程總結(jié) 2013-08-08 23:16 545
          操你妹  回復(fù)  更多評(píng)論
            

          # re: 用java調(diào)用oracle存儲(chǔ)過(guò)程總結(jié) 2014-05-07 10:10 java編程
          @ice
          你媽逼的你會(huì)寫你不寫出來(lái),你沒(méi)有資格在說(shuō)罵別人,別他媽的自認(rèn)為是。小心被車給撞死。  回復(fù)  更多評(píng)論
            

          # re: 用java調(diào)用oracle存儲(chǔ)過(guò)程總結(jié)[未登錄](méi) 2014-06-06 20:29 匿名
          游標(biāo)名字@chester
            回復(fù)  更多評(píng)論
            

          # re: 用java調(diào)用oracle存儲(chǔ)過(guò)程總結(jié) 2014-08-06 10:58 czgwq344703887
          @little star
          中國(guó)的學(xué)問(wèn)博大精深,學(xué)無(wú)止境,支持樓主  回復(fù)  更多評(píng)論
            

          # re: 用java調(diào)用oracle存儲(chǔ)過(guò)程總結(jié) 2014-08-18 16:12 iversion
          SB一個(gè) 不解釋@ice
            回復(fù)  更多評(píng)論
            

          # re: 用java調(diào)用oracle存儲(chǔ)過(guò)程總結(jié) 2014-10-03 23:35 bean先森
          學(xué)習(xí)了  回復(fù)  更多評(píng)論
            

          主站蜘蛛池模板: 延吉市| 巴彦县| 乌兰察布市| 山东省| 通榆县| 南康市| 浏阳市| 铜鼓县| 定州市| 长宁区| 延寿县| 通州区| 扶余县| 乐都县| 蒙阴县| 集贤县| 盐山县| 龙岩市| 吉木乃县| 泊头市| 琼海市| 讷河市| 蒙自县| 白银市| 凯里市| 专栏| 吉安市| 天水市| 陵川县| 颍上县| 扶绥县| 岳普湖县| 浙江省| 淅川县| 赤水市| 岐山县| 苍溪县| 通江县| 富源县| 开平市| 安吉县|