1. 程式人生 > >PL/SQL儲存過程操作例項及其講解說明

PL/SQL儲存過程操作例項及其講解說明

建立過程

過程使用CREATE OR REPLACE PROCEDURE語句建立,使用CREATE OR REPLACE PROCEDURE語句簡化語法如下:

CREATE[OR REPLACE]PROCEDURE procedure_name
[(parameter_name [IN| OUT |IN OUT] type [,...])]{IS|AS}BEGIN< procedure_body >END procedure_name;

這裡,

  • procedure-name 指定的程式的名稱

  • [OR REPLACE] 選項允許修改現有的程式

  • 可選的引數列表中包含的名稱,模式和型別的引數。IN表示該值將被從外部傳遞,OUT表示該引數將被用於從過程返回一個值到外面

  • procedure-body 包含可執行部分

  • AS關鍵字來代替了IS關鍵字用於建立一個獨立的程式。

視窗截圖:


該儲存過程是查詢陣列中最大值,並輸出,輸入引數int_varray是建立的整型陣列,建立語法如下:

create or replace type int_varray as table of int;

int_varray建立成功截圖:


單獨的儲存過程例項原始碼:

-- Created on 2018/3/29 by E.WANG 
/*
過程使用CREATE OR REPLACE PROCEDURE語句建立,使用CREATE OR REPLACE PROCEDURE語句簡化語法如下:

CREATE [OR REPLACE] PROCEDURE procedure_name
[(parameter_name [IN | OUT | IN OUT] type [, ...])]
{IS | AS}
BEGIN
  < procedure_body >
END procedure_name;
這裡:

procedure-name 指定的程式的名稱

[OR REPLACE] 選項允許修改現有的程式

可選的引數列表中包含的名稱,模式和型別的引數。
IN表示該值將被從外部傳遞,OUT表示該引數將被用於從過程返回一個值到外面。

procedure-body 包含可執行部分

AS關鍵字來代替了IS關鍵字用於建立一個獨立的程式。
*/

--求陣列中的最大值並輸出
create or replace procedure MaxOfVarray(valueList in int_varray,z out int) 
as
tmpResult int:=0; 
begin
  for x in 1..valueList.count loop
      if valueList(x)>=tmpResult then
         tmpResult:=valueList(x);
      end if;
  end loop;
  z:=tmpResult;
end;  

    

宣告並呼叫儲存過程例項原始碼:

-- Created on 2018/3/29 by E.WANG 
/*
在Oracle的儲存過程和函式中,其實IS和AS是同義詞,沒有什麼區別。

還有在自定義型別(TPYE)和包(PACKAGE)時,使用IS和AS也並沒有什麼區別。

但是在建立檢視(VIEW)時,只能使用AS而不能使用IS。

在宣告遊標(CURSOR)時,只能使用IS而不能使用AS。
*/
declare
  one int;
  two int;
  three int;
  --定義一個整型陣列
  numlist int_varray;
  --宣告並定義儲存過程MaxOfTwo
  --找出兩個數中的最值並輸出該值
  procedure MaxOfTwo(x in int,y in int,z out int)
  as
  begin
     if x>y then
        z:=x;
     else
        z:=y;
     end if;
  end;

begin
  numlist:=int_varray(12,2,56,75,24);
  --呼叫儲存過程MaxOfVarray
  MaxOfVarray(numlist,three);
  dbms_output.put_line('The max of int_varray(12,2,56,75,24): '|| three);
  --給變數one、two、three賦值
  one:=10;
  two:=20;
  --呼叫儲存過程MaxOfTwo
  MaxOfTwo(one,two,three);
  dbms_output.put_line('The max of (10,20): '|| three);
end;

視窗截圖:


執行結果截圖: