oracle資料庫儲存過程基礎知識

2021-08-11 03:38:14 字數 3277 閱讀 9633

工具pl/sql developer

1. 建立資料庫儲存過程(程式視窗 program window)

1).無引數的儲存過程

create [or replace] procedure  儲存過程名  is/as

declare --宣告變數的標識(可以寫也可以不寫)

變數名   變數型別(值範圍);

變數名 變數型別(值範圍)  :=值;

變數名   contant  資料型別 :=初始值    (常量)

begin

pl/sql塊

exception 

異常end 儲存過程名;

2).有引數的儲存過程

create [or replace] procedure 儲存過程名(引數名 in/out 引數型別) is/as

declare --宣告變數的標識(可以寫也可以不寫)

變數名  變數型別(值範圍);

變數名 變數型別(值範圍) :=值;

begin

pl/sql塊

exception --異常處理標示

異常end 儲存過程名;

注意:有引數的儲存過程引數不用規定長度

in表示輸入引數,按值傳遞方式。

out 表示輸出引數,可以理解為按引用傳遞方式。可以作為儲存過程的輸出結果,供外部呼叫者使用。

in out 即可作輸入引數,也可作輸出引數。

3)儲存過程中游標的使用

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;

end loop;

2.刪除儲存過程 (命令視窗command window)drop  procedure  儲存過程名

3.執行儲存過程(命令視窗)

exec/execute  儲存過程名;

或 call  儲存過程名;

執行儲存過程 (sql 視窗sql window)

begin

儲存過程名(引數);

end;

4.編輯已存在的儲存過程(命令視窗 command window)

edit   儲存過程名

5.檢視已經存在的儲存過程(命令視窗 command window)

view  儲存過程名

6.測試儲存過程(測試視窗 test window)

在第7行輸入儲存過程名(); 如下圖所示

7.檢視正在執行的儲存過程

select name,locks,pins

from v$db_object_cache

where locks > 0 and pins > 0 and type='procedure';

8.殺死正在執行的資料

elect   b.sid,b.serial#,a.object, 'alter system kill session   ' || '''' || b.sid || ',' ||b.serial# ||  ''';' kill_command

from   sys.v_$access a, sys.v_$session b

where    a.type = 'procedure'

and   (a.object like upper('%儲存過程名%') or

a.object like lower('%儲存過程名%'))

and a.sid = b.sid

and b.status = 'active';

alter system kill session 'sid,serial#';

9.oracle中的死鎖

查詢資料庫死鎖

select t2.username,t2.sid,t2.serial#,t2.logon_time,t3.sql_text

from v$locked_object t1,v$session t2,v$sqltext t3

where t1.session_id=t2.sid 

and t2.sql_address=t3.address

order by t2.logon_time;

找到正在執行的包的 sid ,serial#

select   b.sid,b.serial#,a.object, 'alter system kill session   ' || '''' || b.sid || ',' ||b.serial# ||  ''';' kill_command

from   sys.v_$access a, sys.v_$session b

where    a.type = 'package'

and a.sid = b.sid

and b.status = 'active';

查詢出來的結果就是有死鎖的session了,

下面就是殺掉

拿到上面查詢出來的sid和serial#,填入到下面的語句中

alter system kill session 'sid,serial#';

Oracle資料庫儲存過程

建立語句 create or replace procedure 儲存過程名 儲存過程名定義 包括儲存過程名和引數列表。引數名和引數型別。引數名不能重複,引數傳遞方式 in,out,in out in 表示輸入引數,按值傳遞方式。out 表示輸出引數,可以理解為按引用傳遞方式。可以作為儲存過程的輸出...

oracle資料庫 儲存過程

儲存過程 stored procedure 是一組為了完成特定功能的sql 語句集,經編譯後儲存在資料庫中。使用者通過指定儲存過程的名字並給出引數 如果該儲存過程帶有引數 來執行它。儲存過程是資料庫中的乙個重要物件,任何乙個設計良好的資料庫應用程式都應該用到儲存過程。儲存過程是由流控制和sql 語句...

資料庫儲存過程基礎

1.建立簡單的儲存過程 create proc proc name as select from syscolumns where object name id crm customer 2 執行儲存過程 exec proc name 3 刪除儲存過程 drop proc proc name 4.帶...