-- 儲存過程基礎語法
1.1 基本結構
create or replace procedure 儲存過程名字
(引數1 in number,
引數2 in number
) as
變數1 integer :=0;
變數2 date;
begin
end;
1.2 select into statement
將select查詢的結果存入到變數中,可以同時將多個列儲存多個變數中,必須有一條
記錄,否則丟擲異常(如果沒有記錄丟擲no_data_found)
例子:
begin
select col1,col2 into 變數1,變數2 from typestruct where ***;
exception
when no_data_found then
***x;
end;
...1.3 if 判斷
if v_test=1 then
begin
do something
end;
end if;
練習:create or replace procedure usp_lu_fac_prc_repymt_bill_d
(id_in in tbl_lu_fac.id%type,
result_cursor out types.cursor_type)as
v_prc_id tbl_lu_fac_prc.id%type;
v_repymt_id tbl_lu_fac_repymt.id%type;
begin
select
tbl_lu_fac_prc.id,
tbl_lu_fac_repymt.id
into v_prc_id,v_repymt_id
from tbl_lu_fac
left join tbl_lu_fac_prc on tbl_lu_fac_prc.lu_fac_id = tbl_lu_fac.id
left join tbl_lu_fac_repymt on tbl_lu_fac_repymt.lu_fac_id = tbl_lu_fac.id
where tbl_lu_fac.id = id_in
for update nowait;
if(v_prc_id is not null) then
begin
delete from tbl_lu_fac_prc where tbl_lu_fac_prc.id = v_prc_id;
end;
end if;
if(v_repymt_id is not null) then
begin
delete from tbl_lu_fac_repymt where tbl_lu_fac_repymt.id = v_repymt_id;
end;
end if;
delete from tbl_lu_fac where tbl_lu_fac.id = id_in;
open result_cursor for
select 'success' as status from dual;
exception
when no_data_found then
err.raise_err(err.deleted_by_other_user);
when err.record_is_locked then
err.raise_err(err.updated_by_other_user);
when others then
raise;
end;
————————————————————————————————
1.4 while 迴圈
while v_test=1 loop
begin
***x
end;
end loop;
1.5.變數賦值
v_test := 123;
1.6.用for in 使用cursor
...is
cursor cur is select * from ***;
begin
for cur_result in cur loop
begin
v_sum :=cur_result.列名1+cur_result.列名2
end;
end loop;
end;
注:有三種迴圈
1、loop
exit when 條件;
.............
end loop;
2、 while 條件 loop
..............
end loop;
3、for i in 1..100 loop
..........
end loop;
還有一種是用隱式游標來實現的:
for idx in (select a, b from tablea) loop
................
end loop;
1.7、陣列
首先明確乙個概念:oracle中本是沒有陣列的概念的,陣列其實就是一張表(table),每個陣列元素就是表中的乙個記錄。
使用陣列時,使用者可以使用oracle已經定義好的陣列型別,或可根據自己的需要定義陣列型別。
(1)使用oracle自帶的陣列型別
x array; --使用時需要需要進行初始化
e.g:
create or replace procedure test(y out array) is
x array;
begin
x := new array();
y := x;
end test;
(2)自定義的陣列型別 (自定義資料型別時,建議通過建立package的方式實現,以便於管理)
e.g (自定義使用參見標題4.2)
create or replace package mypackage is
-- public type declarations type info is record( name varchar(20), y number);
type testarray is table of info index by binary_integer; --此處宣告了乙個testarray的型別資料,其實其為一張儲存info資料型別的table而已,及testarray 就是一張表,有兩個字段,乙個是
name,乙個是y。需要注意的是此處使用了index by binary_integer 編制該table的索引項,也可以不寫,直接寫成:type testarray is
table of info,如果不寫的話使用陣列時就需要進行初始化:vararray mypackage.testarray; vararray := new mypackage.testarray();
end testarray;
1.8.帶引數的cursor
cursor c_user(c_id number) is select name from user where typeid=c_id;
open c_user(變數值);
loop
fetch c_user into v_name;
exit fetch c_user%notfound;
do something
end loop;
close c_user;
1.9.用pl/sql developer debug
連線資料庫後建立乙個test window
在視窗輸入呼叫sp的**,f9開始debug,ctrl+n單步除錯
儲存過程基礎
建立輸入引數儲存過程 create or replace procedure lyr3 name varchar2,age number is begin insert into student values sys guid name,age end 建立輸出儲存過程 create procedu...
基礎 儲存過程
github mysql 5.0開始支援儲存過程,儲存過程是存在資料庫中的一段sql集合,呼叫儲存過程可以減少很多任務作量,減少資料在資料庫和應用伺服器上的傳輸,對於提高資料處理的效率,同時注意,儲存過程沒有or replace的關鍵字,mysql的儲存過程引數包括 in,out,inout 三種模...
儲存過程基礎
這一篇要總結的是儲存過程,包括儲存過程有哪幾種,如何建立,以及最後如何呼叫儲存過程。所以分為以下幾個方面進行總結。1,不帶引數的儲存過程 2,帶輸入引數的儲存過程 3,帶輸入和輸出引數的儲存過程 4,帶返回值的儲存過程 例如,以下儲存過程返回employees表中所有職員的記錄。儲存過程 use t...