Oracle 儲存過程(procedure)學習

2021-09-29 02:41:38 字數 3661 閱讀 5981

二、在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...