ORACLE package包中的儲存過程的定義和使用
最近的專案中用到了oracle package包中的儲存過程。本文以一個簡單的插入為例,簡述從儲存過程的定義,包括PACKAGE的定義和PACKAGE BODY的定義,到儲存過程的使用。
首先用sql語句建立一個USER_INFO表,sql語句如下:
*****************USER_INFO表建立語句********************
-- Create table
create table USER_INFO
(
id VARCHAR2(4),
username VARCHAR2(15),
password VARCHAR2(15),
address VARCHAR2(30)
);
然後定義儲存過程USER_INSERT,先定義PACKAGE包頭USER_CONTROL,sql語句如下:
******************儲存過程包頭USER_CONTROL*********************************
CREATE OR REPLACE PACKAGE USER_CONTROL AS
PROCEDURE USER_INSERT (
in_id user_info.id%TYPE,
in_username user_info.username%TYPE,
in_password user_info.password%TYPE,
in_address user_info.address%TYPE
);
END USER_CONTROL;
在定義PACKAGE BODY包體USER_CONTROL,這裡包頭和包體的名字要相同,sql語句如下:
****************儲存過程包體***************************
CREATE OR REPLACE PACKAGE BODY USER_CONTROL AS
PROCEDURE USER_INSERT (
in_id user_info.id%TYPE,
in_username user_info.username%TYPE,
in_password user_info.password%TYPE,
in_address user_info.address%TYPE
)IS
BEGIN
INSERT INTO USER_INFO(ID,USERNAME,PASSWORD,ADDRESS) VALUES(in_id,in_username,in_password,in_address);
END;
END USER_CONTROL;
這樣,一個簡單的儲存過程就定義好了。下面就是呼叫這個儲存過程了。
用SQL語句就可以呼叫這個儲存過程。
*******************呼叫儲存過程*****************
DECLARE
BEGIN
USER_CONTROL.USER_INSERT('11','11,'11','11'),
END;
最後在提交這個事務就可以把資料插入到表中了。
當然有的同學會說,你一個插入的功能就寫了這麼多程式碼,我一個insert語句不就搞定了嘛。
我這裡只是給了一個儲存過程從定義到使用的步驟。並沒有在儲存過程中寫太多動作。
其實我們可以簡單的這樣理解,把PACKAGE包頭理解為JAVA中的介面,把PACKAGE BODY理解為JAVA中實現這個介面的類,而裡面的儲存過程就相當於類中的方法了。
希望對大家有幫助吧。