with return to caller選項指定將來自游標的結果返回給呼叫者,後者可以是另乙個過程或者客戶機應用程式,這是預設選項
with return to client選項指定將來自游標的結果返回給客戶機應用程式,繞過中間的任何過程.
子儲存過程:
create procedure test(
out v_message varchar(500)
)
dynamic result sets 1
language sql
begin
--異常處理
declare sqlcode int;
declare v_errcode int default 0;
declare continue handler for sqlexception
begin
set v_errcode = sqlcode;
end;
set v_message = '子儲存過程';
--使用游標返回結果集
begin
declare v_cur cursor with hold with return to caller for
select * from test;
open v_cur;
end;
return v_errcode;
end@
--呼叫子儲存過程
createprocedurecalltest(
out v_messagevarchar(500) )
dynamic result sets 1
language sql
begin
declaresqlcodeint;
declarev_errcodeintdefault0;
declareresult1 result_set_locatorvarying;
--用來接收子儲存過程的結果集
declarev_namevarchar(500);
--用來接收子儲存過程的輸出引數
declarev_idint;
declarev_cityvarchar(50); --
異常處理
declarecontinue handler
forsqlexception
begin
setv_errcode = sqlcode;
end;
--定義臨時表
declareglobaltemporarytabletemp (
idint,
ctiyvarchar(50)
)oncommitpreserverowswith
replace
notlogged;
--呼叫子儲存過程
call test(v_name);
if v_errcode = 0then
setv_message = '呼叫
'||v_name||'成功
';else
setv_message = '呼叫
'||v_name||'失敗
';endif;
--呼叫子過程的結果集
associate resultsetlocators (result1)withproceduretest;
allocate callc2cursor
forresultsetresult1;
--將子過程結果集插入臨時表
fetchfromcallc2intov_id, v_city;
while sqlcode = 0 do
insertintosession.tempvalues(v_id,v_city);
fetchfromcallc2intov_id, v_city;
endwhile;
--使用游標返回結果集
begin
declarev_curcursorwithholdwithreturn to caller
for
select*fromsession.temp;
open v_cur;
end;
return v_errcode;
end@
Oracle儲存過程呼叫儲存過程
oracle儲存過程呼叫有返回結果集的儲存過程一般用光標的方式,宣告乙個游標,把結果集放到游標裡面,然後迴圈游標 declare newcs sys refcursor cs1 number cs2 number cstype table rowtype table列的個數和newcs返回的個數一樣...
呼叫儲存過程
用乙個命令物件呼叫儲存過程,就是定義儲存過程的名稱,給過程的每個引數新增引數定義,然後執行命令。1.呼叫沒有返回值的儲存過程 呼叫儲存過程的最簡單示例是不給呼叫者返回任何值。下面定義了兩個這樣的儲存過程,乙個用於更新現有的region記錄,另乙個用於刪除指定的region記錄。1 記錄的更新 cre...
儲存過程呼叫
size medium color blue 於 size small 儲存過程 包含三部分 宣告,執行部分,異常。可以有無引數程式和帶引數儲存過程。無參程式語法 1 create or replace procedure noparpro 2 as 3 begin 4 5 exception 6 ...