ORACLE 存儲過程語法歸納

1、創建存儲過程

create or replace procedure test(var_name_1 in type,var_name_2 out type) as --聲明變量(變量名變量類型)

begin

--存儲過程的執行體

end test;
打印出輸入的時間信息
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 循環

For ... in ... LOOP
--執行語句
end LOOP;

(1)循環遍歷遊標

create  or replace procedure test() as

Cursor cursor is select name from student;

name varchar(20);
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;

end test;

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;


下次寫列子:



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章