Oracle PL/SQL之 Package介紹
Package 包
一 包的組成
- 包頭(package):包頭部分申明包內資料型別,常量,變數,遊標,子程式和異常錯誤處理,這些元素為包的公有元素。
- 包主體(package body):包主體則是包定義部分的具體實現,它負責為包頭中所宣告子程式提供具體的實現,在包主體中還可以宣告包的私有元素。
- 包頭和包主體分開編譯,並作為兩個分開的物件分別存放在資料庫字典中。
二 包的語法規則
包頭的語法如下:
-
create or replace package 包名
-
As | IS
-
procedure 過程名();
-
Function 函式名() return 資料型別;
-
變數定義;
-
異常定義;
-
游標定義;
-
...........
-
...........
- End 包名;
包體建立的語法:
-
create or replace Package Body 包名
-
As | IS
-
Procedure 過程定義;
-
Procedure 過程定義;
-
Function 函式定義;
-
Function 函式定義;
-
.........;
-
- end 包名;
三 包的應用與舉例
下面是student 和SC表的定義:-
CREATE TABLE Student
-
(Sno CHAR(9) PRIMARY KEY,
-
Sname CHAR(20) NOT NULL,
-
Ssex CHAR(4),
-
Sage SMALLINT,
-
Sdept CHAR(20)) tablespace starivespace;
-
-
-
CREATE TABLE SC
-
(Sno CHAR(9) NOT NULL,
-
Cno CHAR(6) NOT NULL,
-
Grade SMALLINT,
-
PRIMARY KEY (Sno,Cno),
-
constraint f1 FOREIGN KEY (Sno) REFERENCES Student(Sno),
-
FOREIGN KEY (Cno) REFERENCES Course(Cno)
- ) tablespace starivespace
例項:定義一個包,實現如果功能: 輸入學號,分別返回該學生的所在系和相應的選課成績(如果有多門成績,那麼就輸出多門成績)。
定義包頭:
-
create or replace
-
package sdept_or_grade as
-
procedure print_sdept(psno char);
-
procedure print_grade(psno char);
-
end;
-
/
-
-
- 程式包已建立。
建立包體:
-
create or replace
-
package body sdept_or_grade
-
as
-
procedure print_sdept(psno char) as
-
psdept student.sdept%type;
-
begin
-
select sdept into psdept
-
from student
-
where sno=psno;
-
dbms_output.put_line(psdept);
-
exception
-
when no_data_found then
-
dbms_output.put_line(\'Invalid student number\');
-
end;
-
procedure print_grade(psno char) as
-
pgrade SC.grade%type;
-
cursor printgrade is select grade into pgrade
-
from sc
-
where sno=psno;
-
-
begin
-
open printgrade;
-
loop
-
fetch printgrade into pgrade;
-
dbms_output.put_line(pgrade);
-
exit when printgrade%notfound;
-
end loop;
-
close printgrade;
-
exception
-
when no_data_found then
-
dbms_output.put_line(\'Invalid student number\');
-
end;
-
end;
- /
程式包體已建立。
獲取結果:
-
SQL> set serveroutput on;
-
SQL>
-
SQL> execute sdept_or_grade.print_sdept(\'0201\');
-
cs
-
-
PL/SQL 過程已成功完成。
-
-
SQL>
-
SQL> execute sdept_or_grade.print_grade(\'0201\');
-
89
-
64
-
50
-
50
-
- PL/SQL 過程已成功完成。
四 心得體會
從以上例子,和以往在實際應用中額經驗,對包的優點總結如下:
第一 包可以簡化應用程式設計:程式包的說明部分和包體部分可以分別建立各編譯。體現在以下三個方面:
1) 在設計一個應用程式,只建立各編譯程式包的說明部分,然後再編寫引用該程式包的PL/SQL塊。
2) 當完成整個應用程式的整體框架後,再回頭來定義包體部分。只要不改變包的說明部分,就可以單獨除錯、增加或替換包體的內容,這不會影響其他的應用程式。
3) 更新包的說明後必須重新編譯引用包的應用程式,但更新包體,則不需重新編譯引用包的應用程式,以快速進行應用程式的原形開發。
第二 模組化:可將邏輯相關的PL/SQL塊或元素等組織在一起,用名稱來唯一標識程式包。把一個大的功能模組劃分人適當個數小的功能模組,分別完成各自的功能。這樣組織的程式包都易於編寫,易於理解更易於管理。
第三 效率高:程式包在應用程式第一次呼叫程式包中的某個元素時,ORACLE將把整個程式包載入到記憶體中,當再次訪問程式包中的元素時,將直接從內在中讀取,而不需要進行磁碟I/O操作而影響速度,同時位於內在中的程式包可被同一會話期間的其它應用程式共享。因此,程式包增加了重用性並改善了多使用者、多應用程式環境的效率。
最後 還有提到一點: 資訊隱藏。因為包中的元素可以分為公有元素和私有元素。公有元素可被程式包內的過程、函式等的訪問,還可以被包外的PL/SQL訪問。但對於私有元素只能被包內的過程、函式等訪問。對於使用者,只需知道包的說明,不用瞭解包休的具體細節(由於時間關係,明天繼續貼出“資訊隱藏”的相關例子)。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26435490/viewspace-1078212/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle PL/SQL 關於遊標的介紹OracleSQL
- PL/SQL 09 包 packageSQLPackage
- Oracle PL/SQL塊簡介OracleSQL
- Oracle PL/SQL 之 函式OracleSQL函式
- Oracle PL/SQL之GROUP BY CUBEOracleSQL
- ORACLE之常用FAQ:SQL&PL/SQLOracleSQL
- Oracle PL/SQLOracleSQL
- Oracle Pl/SQL 之 儲存過程OracleSQL儲存過程
- Oracle之PL/SQL基礎學習OracleSQL
- Oracle PL/SQL INDICESOracleSQL
- oracle PL/SQL示例OracleSQL
- Mybatis介紹之 動態SQLMyBatisSQL
- Oracle之PL/SQL基礎學習之二OracleSQL
- Oracle SQL效能優化系列介紹OracleSQL優化
- oracle pl/sql programmingOracleSQL
- ORACLE索引與高效能SQL介紹Oracle索引SQL
- Oracle PL/SQL編寫PL/SQL程式碼的注意事項OracleSQL
- Oracle PL/SQL中EXCEPTION用法OracleSQLException
- PL/SQL Developer 連線 OracleSQLDeveloperOracle
- oracle INDEX BY Pl/sql陣列OracleIndexSQL陣列
- 【PL/SQL】oracle建立dblinkSQLOracle
- Oracle PL/SQL迴圈示例OracleSQL
- 【SQL】SQL表連線方法方式介紹(Oracle/Postgresql)SQLOracle
- PL/SQL package SYS.DBMS_BACKUP_RESTORE version 19.16.00.00 in TARGET database isSQLPackageRESTDatabase
- Master Note For PL/SQL UTL_FILE Package (Doc ID 1155024.1)ASTSQLPackage
- 【Oracle】--PL/SQL匯入Oracle sql指令碼"傻瓜教程"OracleSQL指令碼
- Python的包(package)和模組(module)介紹PythonPackage
- Angular Package Format (APF) v12.0 介紹AngularPackageORM
- 【PL/SQL】向表中插入連續數字之PL/SQL方法SQL
- Sql索引介紹SQL索引
- (轉)ORACLE索引與高效能SQL介紹Oracle索引SQL
- Oracle 的PL/SQL語言使用OracleSQL
- oracle PL/SQL中的過載OracleSQL
- Oracle PL/SQL語言基礎OracleSQL
- 【Oracle】Windows安裝pl/sql developerOracleWindowsSQLDeveloper
- oracle dbms_profiles分析pl/sqlOracleSQL
- ORACLE PL/SQL程式設計詳解之一: PL/SQL 程式設計簡介(千里之行,始於足下)OracleSQL程式設計
- Oracle 11g系列:SQL Plus與PL/SQLOracleSQL