oracle 儲存過程學習

dingzihan發表於2014-07-02
幾個注意點:
1、在oracle中,資料表別名不能加as.
2、在儲存過程中,select某一欄位時,後面必須緊跟into,如果select整個記錄,利用遊標的話就另當別論了。
3、在利用select ....into...語法時,必須先確保資料庫中有該條記錄,否則會報出“NO Data found"異常。
4、在儲存過程中,別名不能和欄位名稱相同,否則雖然編譯可以通過,但在執行階段會報錯。

    商業規則和業務邏輯可以通過程式儲存在oracle中,這個程式就是程式過程。
     儲存過程是SQL,PL/SQL,JAVA 語句的組合,它使你能將執行商業規則的程式碼從你的應用程式中移動到資料庫。這樣的結果就是,程式碼儲存一次但是能夠被多個程式使用。
    要建立一個過程物件,必須有create procedure系統許可權。如果這個過程物件需要被其他的使用者使用,那麼你必須有create any procedure許可權。執行procedure的時候,可能需要execute許可權。或者execute any procedure許可權。

如果單獨賦予許可權,例:
grant execute my_procedure to WW;
儲存過程(procedure)和函式(function)的區別。
function 有返回值,並且可以直接在query中引用function或者使用function的返回值。
本質上沒有區別,都是PL/SQL程式,都可以有返回值。最根本的區別是:儲存過程是命令,而函式是表示式的一部分。比如:
package是function,procedure,variables和sql 語句的組合。package允許多個procedure使用同一個變數和遊標。
sql程式碼:
create  procedure  sam.credit (acc_no in number,amount in number) as
 begin
     update  accounts
     set balance = balance + account
     where  account_id = acc_no;
end;

IN,out,in out 用來修飾引數。
IN 表示這個變數必須被呼叫者賦值然後傳入到procedure進行處理。
out 表示procedure 通過這個變數將值傳回給呼叫者。
IN OUT 則是這兩種的組合。
authid 代表兩種許可權:
定義者許可權(difiner  right 預設),執行者許可權 (invoker  right)。
定義者許可權說明這個procedure中涉及的表,檢視等物件所需要的許可權只要定義者擁有許可權的話就可以訪問。
執行者許可權需要呼叫這個procedure的使用者擁有相關表和物件的許可權。

         oracle 儲存過程的基本語法
1、基本結構
create  or  replace  procedure  儲存過程名字
(引數 1 IN number,
  引數 2 IN number)
as 
變數 1 integer :=0;
變數2  date;
begin
end  儲存過程名字

2、select into statement
將select 查詢的結果存入到變數中,可以同時將多個列儲存多個變數中,必須有一條記錄,否則丟擲異常(如果沒有記錄丟擲 no_data_found)
begin
  select col1,col2 into 變數1,變數2 from  typestruct where xxx;
 exception
when no_data_found  then
 *****;
end;
...........

3、 IF 判斷
if  v_test=1 then
  begin
    do something
  end;
endif;

4、while迴圈
while  v_test=1   loop
  begin
 ****
  end;
end loop;

5、變數賦值
v_test := 123;

6、用for  in 使用 cursor
is
cursor  cur is  select * from ***;
begin
for  cur_result  cur loop
begin
 v_sum :=cur_result.列名1+cur_result.列名 2
end;
 end loop;
end;


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22969361/viewspace-1204792/,如需轉載,請註明出處,否則將追究法律責任。

相關文章