二、在oracle中對儲存過程的呼叫
儲存過程(stored procedure),就是一組用於完成特定資料庫功能的sql語句集,該sql語句集經過編譯後儲存在資料庫系統中。在使用時候,使用者通過指定已經定義的儲存過程名字並給出相應的儲存過程引數來呼叫並執行它,從而完成乙個或一系列的資料庫操作。
oracle儲存過程包含三部分:過程宣告,執行過程部分,儲存過程異常。
create
orreplace
procedure noparpro
as//宣告
;begin
// 執行
; exception//儲存過程異常
;end
;
create
orreplace
procedure queryempname(sfindno emp.empno%
type
)as
sname emp.ename%
type
; sjob emp.job%
type
;begin..
..
exception
....end
;
create
orreplace
procedure runbyparmeters
(isal in emp.sal%
type
,
sname out
varchar
, sjob in
outvarchar
)as
icount number;
begin
select
count(*
)into icount from emp where sal>isal and job=sjob;
if icount=
1then..
..else..
..endif
; exception
when too_many_rows then
dbms_output.put_line(
'返回值多於1行');
when others then
dbms_output.put_line(
'在runbyparmeters過程**錯!');
end;
as
//定義(游標乙個可以遍歷的結果集)
cursor cur_1 is
select area_code,cmcode,
sum(rmb_amt)
/10000 rmb_amt_sn,
sum(usd_amt)
/10000 usd_amt_sn
from bgd_area_cm_m_base_t
where ym >= vs_ym_sn_beg
and ym <= vs_ym_sn_end
group
by area_code,cmcode;
begin
//執行(常用for語句遍歷游標)
for rec in cur_1 loop
update *********xx_t
set rmb_amt_sn = rec.rmb_amt_sn,usd_amt_sn = rec.usd_amt_sn
where area_code = rec.area_code
and cmcode = rec.cmcode
and ym = is_ym;
endloop
;
--顯示cursor的處理
declare
---宣告cursor,建立和命名乙個sql工作區
cursor cursor_name is
select real_name from account_hcz;
v_realname varchar2(20)
;begin
open cursor_name;
---開啟cursor,執行sql語句產生的結果集
fetch cursor_name into v_realname;
--提取cursor,提取結果集中的記錄
dbms_output.put_line(v_realname)
;close cursor_name;
--關閉cursor
end;
declare
realsal emp.sal%
type
; realname varchar(40
);
realjob varchar(40
);begin
//過程呼叫開始
realsal:=
1100
; realname:=
'';
realjob:=
'clerk'
; runbyparmeters(realsal,realname,realjob)
;--必須按順序
dbms_output.put_line(realname||
' '
||realjob)
;end
;//過程呼叫結束
declare
realsal emp.sal%
type
; realname varchar(40
);
realjob varchar(40
);begin
//過程呼叫開始
realsal:=
1100
; realname:=
'';
realjob:=
'clerk'
; --指定值對應變數順序可變
runbyparmeters(sname=
>realname,isal=
>realsal,sjob=
>realjob)
;
dbms_output.put_line(realname||
' '
||realjob)
;end
;//過程呼叫結束
1、sql
>
exec proc_emp(
'引數1'
,'引數2');
//無返回值過程呼叫
2、sql
>var vsal number
sql>
exec proc_emp (
'引數1'
,:vsal)
;// 有返回值過程呼叫
或者:call proc_emp (
'引數1'
,:vsal)
;// 有返回值過程呼叫
參考鏈結 Oracle儲存過程呼叫儲存過程
oracle儲存過程呼叫有返回結果集的儲存過程一般用光標的方式,宣告乙個游標,把結果集放到游標裡面,然後迴圈游標 declare newcs sys refcursor cs1 number cs2 number cstype table rowtype table列的個數和newcs返回的個數一樣...
ORACLE儲存過程
自定義函式開始 create or replace function fn wftemplateidget templatecategoryid number,organid number,templatemode number return number istemplateid number i...
Oracle 儲存過程
create or replace procedure p 有就替換,沒有就建立 iscursor c is select from emp for update begin for v emp in c loop if v emp.deptno 10 then update emp2 set sa...