1、創建存儲過程
create or replace procedure test(var_name_1 in type,var_name_2 out type) as --聲明變量(變量名變量類型)
begin
--存儲過程的執行體
打印出輸入的時間信息
E.g:
create or replace procedure test(workDate in Date) is
begin
dbms_output.putline(The input date is:||to_date(workDate, yyyy-mm-dd));
endtest;
2、變量賦值
變量名:=值;
E.g:
create or replace procedure test(workDate in Date) is x number(4,2);
begin
x:=1;
end test;
3、判斷語句:
if 比較式 then begin end;end if;
E.g
create or replace procedure test(x in number) is
begin
if x >0 then
begin x := 0 - x;
end;
end if;
if x = 0 then
begin
x: = 1;
end;
end if ;
end test;
4、For 循環
--執行語句
end LOOP;
(1)循環遍歷遊標
create or replace procedure test() as
Cursor cursor is select name from student;
begin
for name in cursor LOOP
begin
dbms_output.putline(name);
end;
end LOOP;
end test;
(2)循環遍歷數組
create or replace procedure test(varArray in myPackage.TestArray) as
--(輸入參數 varArray 是自定義的數組類型,定義方式見標題 6)
i number;
begin
i := 1;
-- 存儲過程數組是起始位置是從 1 開始的,與 java、C、C++等語言不同。因爲在Oracle中本是沒有數組的概念的,數組其實就是一張
-- 表(Table),每個數組元素就是表中的一個記錄,所以遍歷數組時就相當於從表中的第一條記錄開始遍歷
for i in 1..varArray.count LOOP
dbms_output.putline(The No.|| i ||record in varArray is: ||varArray (i));
end LOOP;
5、While 循環
while 條件語句 LOOP
begin
end;
end LOOP;
E.g
create or replace procedure test(i in number) as
begin
while i < 10 LOOP
begin
i=i+i;
end ;
end LOOP;
end test;
6 數組
首先明確一個概念:Oracle 中本是沒有數組的概念的,數組其實就是一張表(Table),每個數組元素就是表中的一個記錄。使用數組時,用戶可以使用Oracle已經定義好的數組類型,或可根據自己的需要定義數組類型。
(1)oracle 自帶數組類型
X:array -- 使用oracle自帶類型初始化
EG :
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
type info is recode(name in varchar(20), y in number) ; -- public type declarations
type tetsArray is table of info index by binary_integer ; --此處聲明瞭一個testArray的數據類型,其實其位是一張存儲info數據類型的table而已,以及testArray就是一張表字分別
--是name和y,並且使用了Index by binary_integer 作爲索引,可以不寫(type testArray is table of info),但是如果不
--寫的話使用數組時就要進行初始化
-- varArray myPackage.testArray ;
-- varArray := new myPackage.testArray();
end testArray ;
7 遊標的使用
Oracle中Cursor是非常有用的,用於遍歷臨時表中的查詢結果。其相關方法和屬性也很多,現僅就常用的用法做一二介紹:
(1)Cursor 類型的遊標(不能用於參數傳遞)
create or replace procedure test() is
--使用方式一
cursor_1 Cursor is select std_name from student_table where ...
-- 使用方式二
cursor_2 Cursor
begin
select std_name into cursor_2 from student_table where ...
可使用For x in cursor LOOP ....end LOOP; 來實現對Cursor的遍歷
end;
(2)SYS_REFCURSOR型遊標,該遊標是Oracle以預先定義的遊標,可作出參數進行傳遞
create or replace procedure test (rscursor out SYS_REFCURSOR) as
cursor SYS_REFCURSOR , name varchar(20);
begin
open cursor for select name for table where ....
-- SYS_REFCURSOR 只能通過 open for的方式來打開和賦值
LOOP
fetch cursor into name exit when cursor%NOTFOUND -- SYS_REFCURSOR 只能通過fetch into 來打開和遍歷 ,SYS_REFCURSOR中可使用三個狀態屬性:
---%NOTFOUND(未找到記錄信息) %FOUND(找到記錄信息) ---%ROWCOUNT(然後當前遊標所指向的行位置)
dbm_output.putline(name);
end LOOP;
rscursor:=cursor;
end test;
下次寫列子: