1. 程式人生 > >關於oracle呼叫儲存過程返回結果集

關於oracle呼叫儲存過程返回結果集

這兩天因為公司要求,去學習了下以前一直模模糊糊的儲存過程,記錄下關於返回結果集的問題。

要返回結果集,首先你必須有個遊標,它是記錄你的查詢集的。而定義一個遊標有好多方法:

1,你可以在包中定義。然後將遊標變數作為儲存過程引數的型別。

CREATE OR REPLACE PACKAGE pkg_test

AS

    TYPE myrctype IS REF CURSOR;

    PROCEDURE get (outcurse  IN OUT myrctype);

END pkg_test;

然後你就可以在package body 中寫你要的儲存過程了:

CREATE OR REPLACE PACKAGE BODY pkg_test IS

   PROCEDURE get

   (

       outcurse  IN OUT retcursor

   )

   IS

   begin

        OPEN outcurse FOR

         select * from tbl_test

                where rownum<6;

        return;

   end;


2,第二種方法是直接呼叫oracle自帶的變數 sys_cursor:

CREATE OR REPLACE PROCEDURE getcity (
  citycode     IN       VARCHAR2,
  ref_cursor   OUT      sys_refcursor /* 這個sys_refcursor型別在SYS.STANDARD包中 */
)
AS
BEGIN
  OPEN ref_cursor FOR
    SELECT *
      FROM tb_city_code
     WHERE city_code = citycode;
END;

在程式中呼叫應該就很簡單了:

if(conn !=null){

    String sqlstr = "{call pkgtest.get())}";

     CallableStatement cstmt = conn.prepareCall(sqlstr);

     cstmt.registerOutParameter(1, oracle.jdbc.OracleTypes.CURSOR); //outcurse

     cstmt.executeUpdate();

     ResultSet rs = (ResultSet) cstmt.getObject(1); // 這裡吧資訊已經讀入rs結果集裡面

   while (rs.next()) {

        System.out.println(rs.getString("s_date1")); //tbl_test 表裡的欄位名稱或是結果集的列名稱

     System.out.println(rs.getString("s_date2"));

      }   

         conn.close();

         conn = null;       

}


相關推薦

關於oracle呼叫儲存過程返回結果

這兩天因為公司要求,去學習了下以前一直模模糊糊的儲存過程,記錄下關於返回結果集的問題。 要返回結果集,首先你必須有個遊標,它是記錄你的查詢集的。而定義一個遊標有好多方法: 1,你可以在包中定義。然後將遊標變數作為儲存過程引數的型別。 CREATE OR REPLACE P

[Oracle]高效的PL/SQL程式設計(五)--呼叫儲存過程返回結果

            Oracle.DataAccess.Client.OracleConnection oracleConnection1=new OracleConnection("data source=precolm2;user id=colmtest;password=colmtest");   

java呼叫儲存過程 返回結果

Java程式碼呼叫儲存過程:public Map<String, Object> rankInfo(Map<String, Object> rankMap,String start,String end, String userId,String o

MyBatis呼叫儲存過程返回結果

儲存過程: create or replace procedure get_result_by_sql(p_sql in varchar2,p_result out sys_refcursor,p_msg out varchar2) is begin

Oracle儲存過程返回結果

Oracle儲存過程: CREATE OR REPLACE PROCEDURE getcity ( citycode IN VARCHAR2, ref_cursor O

JAVA呼叫儲存過程--返回結果(傳入基本型別引數,返回基本型別和結果

1  建立儲存過程 create or replace procedure examplepro( inparm1 in varchar2,inparm2 in number,outparm1 out number,result out type_cursor)  ...

C#呼叫ORACLE儲存過程返回結果

Oracle中scott使用者下建立儲存過程: (注:從9i開始有了sys_refcursor這種型別,在以前的Oracle版本中需要使用REF CURSOR,並且還需放在一個程式包中) create or replace procedure sp_getdept (result

mybatis呼叫Oracle儲存過程返回結果

在開發中,有時需要關聯幾張表來進行一些複雜的計算,此時可採用建立一張臨時表,將每次的資料計算後先存入臨時表,然後通過Oracle的遊標返回。 在mybatis中的呼叫如下: //呼叫語法格式,需要構造一個resultMap,用來接收返回的結果集 <select id

SSM-Mybatis呼叫Oracle儲存過程返回結果(遊標)示例

1.建立一個包 此處建立一個包,是為了建立儲存過程時,用遊標作為out輸出引數時宣告為遊標型別用的. --建立一個包 create or replace package types as type empListCursor is ref cursor

oracle 儲存過程返回結果 (轉載)

好久沒上來了, 難道今天工作時間稍有空閒, 研究了一下oracle儲存過程返回結果集.        配合oracle臨時表, 使用儲存過程來返回結果集的資料讀取方式可以解決海量資料表與其他表的連線問題. 在儲存過程中先根據過濾條件從海量資料表中選出符合條件的記錄並存放到臨

python 呼叫mysql儲存過程返回結果

儲存過程: delimiter | create procedure get_product_info(in imid int(10),int iuser varchar(20)) begin select * from tb_test where mid = i

如何在Delphi中呼叫oracle儲存過程返回資料

::::::本文的相關評價及說明資訊:::::: 【delphi+oracle報表解決方案(一)】delphi中呼叫oracle的儲存過程(分帶返回遊標,不返回值兩種)  關鍵字: delphi ,oracle儲存過程,遊標,返回資料集,報表 注:delphi 6+ oracle 8.1.6 一.建立包與

oracle 儲存過程返回 結果 table形式

--sys_refcursor 和 cursor 優缺點比較優點比較優點一:sys_refcursor,可以在儲存過程中作為引數返回一個table格式的結構集(我把他認為是table型別,容易理解,其實是一個遊標集), cursor 只能用在儲存過程,函式,包等的實現體中,不

mybatis呼叫mysql儲存過程返回結果

儲存過程中經常需要返回結果集。Mysql中直接用select即可返回結果集。而oracle則需要使用遊標來返回結果集。這一點Mysql相對比較方便,如下程式碼即可實現輸出結果集: 儲存過程定義: D

oracle使用儲存過程返回資料

很多時候,我們想通過儲存過程獲得一個輸出集。我們知道sql server的儲存過程在執行之後,返回的就是一個集合。但是oracle如果要獲得一個輸出集合,就要麻煩一點了。     oracle獲得輸出集合是通過遊標實現的,而且遊標需要在package中進行宣告。下面就拿分頁的

Mybaits結合Oracle呼叫儲存過程返回遊標的兩種方法

首先你得有張測試表,無論什麼表有一兩個資料就可以,我本身瞭解的也不多,所以本文旨在用最簡單最明瞭的方式來介紹Mybaits結合Oracle呼叫儲存過程返回遊標結果集,幫助和我一樣新入門的同學,高手歡迎指出錯誤幫助我們成長。 然後你得了解Oracle遊標的概念及

oracle呼叫儲存過程和函式返回結果

在程式開發中,常用到返回結果集的儲存過程,這個在MySQL和sql server 裡比較好處理,直接返回查詢結果就可以了,但在Oracle裡面 要 out 出去,就多了一個步驟,對於不熟悉的兄弟們還得出上一頭汗:),這裡我簡單介紹一下,以供參考,   1  定義包      

javaEE--ibatis--Sping+flex4 呼叫儲存過程返回List結果

1. 這段時間在看儲存過程的優劣性並嘗試提高程式的執行效能, 儲存過程能夠: a:降低網路流量 b:執行計劃,儲存過程在首次執行是將產生一個執行計劃。 c:使用儲存過程能夠增強對執行計劃的重複使用,從而也可以通過使用遠端過程呼叫RPC處理伺服器上的儲存過程而提高效能,

儲存過程呼叫 遍歷返回結果

//java呼叫儲存過程 使用遊標遍歷結果集 public void getCallableStatement(){ CallableStatement cs=null; Connection

我的用的儲存過程返回結果記錄的方法

<%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*,java.io.*"%><html><body><%   Clas