課程
/數(shù)據(jù)庫(kù)
/Oracle
/Oracle存儲(chǔ)過(guò)程和自定義函數(shù)
課后思考的解答在哪,輸出集合
2019-01-28
源自:Oracle存儲(chǔ)過(guò)程和自定義函數(shù) 4-1
正在回答
Oracle不像SQLServer那樣在存儲(chǔ)過(guò)程中用Select就可以返回結(jié)果集,而是通過(guò)Out型的參數(shù)進(jìn)行結(jié)果集返回的。實(shí)際上是利用REF CURSOR 代碼如下: ?--procedure返回記錄集: ??----------------------聲明一個(gè)Package-------------- ?CREATE OR REPLACE PACKAGE ?pkg_test ?AS ??TYPEmyrctype ?IS REF CURSOR; ? ?? ?PROCEDURE get_r(p_id NUMBER,p_rc OUT myrctype); ? ? ?--Package中聲明名為get 的Procedure(只有接口沒(méi)內(nèi)容) ?END pkg_test; ???-----------------聲明 Package Body,即上面 Package 中的內(nèi)容,包括 Procedure ?get--------------------- ??CREATE OR REPLACE PACKAGE BODY pkg_test ?AS ?PROCEDURE get_r(p_id NUMBER,p_rc OUT myrctype) ?IS ? sqlstr VARCHAR2 (500); ?BEGIN ? IF p_id = 0 THEN ?OPEN p_rc FOR ? SELECT ID, NAME, sex, address, postcode, birthday ?FROM student;?ELSE ?sqlstr := ? 'select id,name,sex,address,postcode,birthday ?from student where id=:w_id'; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?--w_id是個(gè)參數(shù),--以下 p_rc是個(gè)REF CURSOR游標(biāo)類(lèi)型,而且是OUT型參數(shù),即可返回一個(gè)記錄集了。USING p_id就是替換上面SQL中:w_id值拉:) ??OPEN p_rc FOR sqlstr USING p_id; ??END IF; ?END get; ?END pkg_test; ????--function返回記錄集的例子,原理和上面相同,而是用function的return值來(lái)返回記錄集。 函數(shù)返回記錄集: ? 建立帶ref cursor定義的包和包體及函數(shù): ??代碼如下: ?CREATE OR REPLACE ?package pkg_test as ? ?type myrctype is ref cursor; ??function get_r(intID number) return myrctype; ?end pkg_test; ?/ ??CREATE OR REPLACE ?package body pkg_test as ?--函數(shù)體 ??function get_r(intID number) return myrctype is ?rc myrctype; --定義ref cursor變量 ?sqlstr varchar2(500);??begin ? if intID=0 then ? ?--靜態(tài)測(cè)試,直接用select語(yǔ)句直接返回結(jié)果 ??open rc for select id,name,sex,address,postcode,birthday from student;??else ? --動(dòng)態(tài)sql賦值,用:w_id來(lái)申明該變量從外部獲得 ??sqlstr := 'select id,name,sex,address,postcode,birthday from student where id=:w_id'; ?--動(dòng)態(tài)測(cè)試,用sqlstr字符串返回結(jié)果,用using關(guān)鍵詞傳遞參數(shù) ?open rc for sqlstr using intid; ?end if; ?return rc; ?end get;??end pkg_test;??
create or replace procedure p_test(p_cur out sys_refcursor)
as
begin
? ? ?open p_cur for select * from emp;
end p_test;
舉報(bào)
Java開(kāi)發(fā)重要課程,Oracle數(shù)據(jù)庫(kù)開(kāi)發(fā)工程師的加薪利器
1 回答這些課程,在哪里下載
1 回答各位親,老師的源碼在哪里?
1 回答oracle存儲(chǔ)過(guò)程 與 javabean的方式 獲取信息區(qū)別在哪
1 回答這門(mén)課的學(xué)習(xí)需要基礎(chǔ)不
2 回答:v_return:=v_return是什么意思
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號(hào)-11 京公網(wǎng)安備11010802030151號(hào)
購(gòu)課補(bǔ)貼聯(lián)系客服咨詢(xún)優(yōu)惠詳情
慕課網(wǎng)APP您的移動(dòng)學(xué)習(xí)伙伴
掃描二維碼關(guān)注慕課網(wǎng)微信公眾號(hào)
2019-04-24
Oracle不像SQLServer那樣在存儲(chǔ)過(guò)程中用Select就可以返回結(jié)果集,而是通過(guò)Out型的參數(shù)進(jìn)行結(jié)果集返回的。實(shí)際上是利用REF CURSOR 代碼如下: ?
--procedure返回記錄集: ??
----------------------聲明一個(gè)Package-------------- ?
CREATE OR REPLACE PACKAGE ?pkg_test ?
AS ?
?TYPEmyrctype ?IS REF CURSOR; ? ?
? ?PROCEDURE get_r(p_id NUMBER,p_rc OUT myrctype); ? ? ?--Package中聲明名為get 的Procedure(只有接口沒(méi)內(nèi)容) ?
END pkg_test; ??
?-----------------聲明 Package Body,即上面 Package 中的內(nèi)容,包括 Procedure ?get--------------------- ??
CREATE OR REPLACE PACKAGE BODY pkg_test ?
AS ?PROCEDURE get_r(p_id NUMBER,p_rc OUT myrctype) ?
IS ? sqlstr VARCHAR2 (500); ?
BEGIN ? IF p_id = 0 THEN ?OPEN p_rc FOR ? SELECT ID, NAME, sex, address, postcode, birthday ?FROM student;?
ELSE ?sqlstr := ? 'select id,name,sex,address,postcode,birthday ?from student where id=:w_id'; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?--w_id是個(gè)參數(shù),--以下 p_rc是個(gè)REF CURSOR游標(biāo)類(lèi)型,而且是OUT型參數(shù),即可返回一個(gè)記錄集了。USING p_id就是替換上面SQL中:w_id值拉:) ??
OPEN p_rc FOR sqlstr USING p_id; ??
END IF; ?
END get; ?
END pkg_test; ?
?
??
--function返回記錄集的例子,原理和上面相同,而是用function的return值來(lái)返回記錄集。 函數(shù)返回記錄集: ? 建立帶ref cursor定義的包和包體及函數(shù): ??
代碼如下: ?
CREATE OR REPLACE ?package pkg_test as ? ?type myrctype is ref cursor; ??
function get_r(intID number) return myrctype; ?
end pkg_test; ?
/ ??
CREATE OR REPLACE ?package body pkg_test as ?--函數(shù)體 ??
function get_r(intID number) return myrctype is ?rc myrctype; --定義ref cursor變量 ?
sqlstr varchar2(500);?
?begin ? if intID=0 then ? ?--靜態(tài)測(cè)試,直接用select語(yǔ)句直接返回結(jié)果 ??
open rc for select id,name,sex,address,postcode,birthday from student;?
?else ? --動(dòng)態(tài)sql賦值,用:w_id來(lái)申明該變量從外部獲得 ??
sqlstr := 'select id,name,sex,address,postcode,birthday from student where id=:w_id'; ?--動(dòng)態(tài)測(cè)試,用sqlstr字符串返回結(jié)果,用using關(guān)鍵詞傳遞參數(shù) ?
open rc for sqlstr using intid; ?
end if; ?
return rc; ?
end get;?
?end pkg_test;??
2019-04-24
create or replace procedure p_test(p_cur out sys_refcursor)
as
begin
? ? ?open p_cur for select * from emp;
end p_test;