Oracle 中的包概述
包是 SQL 過程、函式、變數、語句等組合成一個單元。許多不同的應用程式可以共享包的內容,因為它儲存在資料庫中。
包的組成部分
以下是 Oracle 中包的組成部分:
包規範
包規範包含有關儲存在其內部的所有過程、函式、變數、常量等的資訊。它包含所有元件的宣告,但不包含程式碼。
規範中的所有物件都稱為公共物件。如果任何物件在規範中不可用,但在主體中進行了編碼,則稱為私有物件。
包規範的語法為:
CREATE [OR REPLACE] PACKAGE name_of_package
IS | AS
[declaration_of_variable ...]
[declaration_of_constant ...]
[declaration_of_exception ...]
[cursor_specification ...]
[PROCEDURE [Schema..] name_of_procedure
[ (parameter {IN,OUT,IN OUT} datatype [,parameter]) ]
]
[FUNCTION [Schema..] name_of_function
[ (parameter {IN,OUT,IN OUT} datatype [,parameter]) ]
RETURN return_datatype
]
END [name_of_package];包定義或包主體
包主體包含包規範中宣告的所有公共物件的程式碼以及私有物件的程式碼。
可以使用 CREATE PACKAGE BODY 語句建立包主體。
包主體的語法為:
CREATE [OR REPLACE] PACKAGE BODY name_of_package IS | AS [declaration_of_private_variable ...] [declaration_of_private_constant ...] BEGIN [initialization_statement] [PROCEDURE [Schema..] name_of_procedure [ (parameter [,parameter]) ] IS | AS declaration_of_variables; declaration_of_constants; BEGIN statement(s); EXCEPTION WHEN ... END ] [FUNCTION [Schema..] name_of_function [ (parameter [,parameter]) ] RETURN return_datatype IS | AS declaration_of_variables; declaration_of_constants; BEGIN statement(s); EXCEPTION WHEN ... END ] [EXCEPTION WHEN built-in_exception_name1 THEN User defined statement (action) will be taken; ] END;
示例
讓我們首先建立一個名為 STUDENTS 的表:
CREATE TABLE STUDENTS( ID INT NOT NULL, NAME VARCHAR (25) NOT NULL, AGE INT NOT NULL, ADDRESS CHAR (30), FEES DECIMAL (18, 2), PRIMARY KEY (ID) ); Table Created
我們現在將插入值:
INSERT INTO STUDENTS(ID,NAME,AGE,ADDRESS,FEES) VALUES (1, Tom, 22,'Ohio', 17000 ); INSERT INTO STUDENTS(ID,NAME,AGE,ADDRESS,FEES) VALUES (2, Jack, 20, 'Washington', 25000 ); INSERT INTO STUDENTS(ID,NAME,AGE,ADDRESS,FEES) VALUES (3, Amy, 25, 'Boston', 30000 ); INSERT INTO STUDENTS(ID,NAME,AGE,ADDRESS,FEES) VALUES (4, Anne, 18, 'Texas', 27000 );
現在讓我們將上述值分配給 PL/SQL 變數
DECLARE s_id students.id%type := 2; s_name students.name%type; s_addr students.address%type; s_fees students.fees%type; BEGIN SELECT name, fees INTO s_name, s_fees FROM students WHERE id = s_id; dbms_output.put_line (‘Student ' ||s_name || ' from ' || s_addr || ' pays ' || s_fees); END; /
現在輸出將是
Student Jack from Washington pays 25000 PL/SQL procedure completed successfully
現在讓我們建立一個包
CREATE OR REPLACE PACKAGE BODY stu_fees AS
PROCEDURE find_fees(s_id students.id%TYPE) IS
s_fees students.fees%TYPE;
BEGIN
SELECT fees INTO s_fees
FROM students
WHERE id = s_id;
dbms_output.put_line('Fees = '|| s_fees);
END find_sal;
END stu_fees;執行上述程式碼後,將顯示以下結果
Package body created.
包的用途
以下是包的用途
增加的功能
包物件可以被所有正在執行的子程式共享。它們在整個會話期間保持存在,並允許訪問資料,而無需將資料儲存在資料庫中。
模組化
包是模組化的主要示例。它們將所有型別的物件(如過程、函式、變數、語句)儲存在一個整潔的包中。這使得資訊易於理解和易於閱讀。
更輕鬆的應用程式設計
包分為包規範和定義。這意味著可以悠閒地完成包的型別宣告,並且可以在需要時在定義中編寫程式碼。
更好的效能
任何子程式第一次需要包時,它將完全載入到記憶體中。對於下一次,該包已可用於其他子程式。
隱藏的實現細節
物件宣告的詳細資訊在包規範中可用,而實現詳細資訊隱藏在包定義中。這使得包更易於處理和使用。
廣告
資料結構
網路
關係資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP