Oracle儲存過程的呼叫

2021-06-20 06:38:19 字數 2245 閱讀 8950

首先:還是先把儲存過程寫好!(關於對一張表的分頁查詢)

create or replace procedure proc_pagination(

start_num in int --輸入引數:分頁的開始記錄數

,end_num in int --輸入引數:分頁的結束記錄數

,total_count out int --輸出引數:總記錄數

,page_result_set out sys_refcursor --oracle的游標查詢結果集

) as

count_sql varchar2(200); --定義變數:查詢總記錄數的sql

v_sql varchar2(400); --定義變數:分頁查詢結果集的sql

begin

count_sql := 'select count(*) from mymis.tb_mymis_resources_menu';

execute immediate count_sql into total_count; --把查詢的記錄數結果,給輸出引數

--v_sql := 'select * from (select temp.*,rownum as rn from (select * from mymis.tb_mymis_resources_menu order by resource_id asc) temp where rownum <= ' || end_num || ') where rn > ' || start_num;

v_sql := 'select * from (select rownum as rn,a.* from mymis.tb_mymis_resources_menu a where rownum <= ' || end_num || ' order by a.resource_id asc) where rn > ' || start_num;

open page_result_set for v_sql; --把游標查詢的結果集給輸出引數end proc_pagination;

end proc_pagination;

儲存過程寫好了,下面是普通jdbc類的呼叫:(這裡就寫了乙個main方法,做測試用)

public static void main(string args)  else 

connection conn = connectionfactory.getconnection(); //獲取資料庫連線

callablestatement cs; //定義jdbc呼叫儲存過程的類

try

} catch (sqlexception e)

}

下面做了乙個jdbctemplate的呼叫,個人覺得資料庫持久層,spring的jdbctemplate是個好東西,查詢效率也蠻快的,而且查詢方法也很多。同樣寫在main方法裡

public static void main(string args) ;

jdbctemplate.execute("call mymis.proc_pagination(?,?,?,?)");

這樣去呼叫儲存過程,jdbctemplate.execute(callablestatementcreator arg0, callablestatementcallback arg1) 兩個引數,乙個是建立呼叫儲存過程物件,另乙個是返回引數

list resultlist = (list)jdbctemplate.execute(

new callablestatementcreator()";//呼叫儲存過程

callablestatement cs = con.preparecall(storedproc);

cs.setint(1, 4); //匹配輸入輸出引數

cs.setint(2, 8);

cs.registeroutparameter(3, types.integer);

cs.registeroutparameter(4, oracle.jdbc.oracletypes.cursor);

return cs; //返回execute()方法的第乙個引數,建立callablestatement的物件

}},new callablestatementcallback()

rs.close();

return resultsmap; //將整個呼叫儲存過程得到的引數返回。}}

);}

大致就是這樣的,**都經過本機測試過的!!感覺很多資料庫的儲存過程寫法有些差異,不過都大同小異。

Oracle儲存過程呼叫儲存過程

oracle儲存過程呼叫有返回結果集的儲存過程一般用光標的方式,宣告乙個游標,把結果集放到游標裡面,然後迴圈游標 declare newcs sys refcursor cs1 number cs2 number cstype table rowtype table列的個數和newcs返回的個數一樣...

Oracle儲存過程呼叫帶參的儲存過程

oracle儲存過程包含三部分 過程 宣告,執行過程部分,儲存過程異常。oracle儲存過程可以有無引數儲存過程和帶引數儲存過程。一 無參程式過程語法 1create orreplace procedure noparpro2as 3begin 4 5 exception 儲存過程異常6 7end ...

C 呼叫Oracle的儲存過程

平時操作oracle資料庫一般都是呼叫工具類或者框架,慢慢的都快忘了是如何實現的了 汗顏啊 看來平時在學習技術和程式設計的同時,還真的要好好的熟悉一下基礎知識啊 只記得大概的流程,今天特此整理,算是紀念吧 笑哭 oracleconnection connection new oracleconnec...