最近的項目中用到了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中實現這個接口的類,而裏面的存儲過程就相當於類中的方法了。
希望對大家有幫助吧。