六)程式包1.基本概念 程式包簡稱包,用於將邏輯相關的PL/SQL塊或元素(變數、常量、自訂資料類型、異常、過程、函數、遊標)等組織在一起,作為一個完整的單中繼存放區在資料庫中,用名稱來標示程式包。 程式包分兩個獨立的部分:說明部分和包體部分,這兩部分獨立的儲存在資料字典中。包的說明部分的更改需要重新編譯調用的應用程式,包體部分的更改不需要重新編譯調用的應用程式。2.建立包1)建立一個包說明部分。CREATE PACKAG<包名>IS變數、常量及資料類型定義;遊標定義頭部;函數、過程的定義和參數列表以及傳回型別;END<包名>;CREATE PACKAGE my_packageIS man_num NUMBER; --定義了兩個全域變數 woman_num NUMBER; CURSOR teacher_cur; --定義了一個遊標 CREATE FUNCTION F_count_num(in_sex in TEACHERS.SEX%TYPE) RETURN NUMBER; --定義了一個函數 CREATE PROCEDURE P_count_num (in_sex in TEACHERS.SEX%TYPE,out_num out NUMBER); --定義了一個過程END my package;2)對應的包體CREATE PACKAGE BODY <包名>AS遊標、函數、過程的具體定義;END<包名>;CREATE PACKAGE BODY my_package ASCURSOR teacher_cur IS --遊標具體定義 SELECT TID , TNAME , TITLE , SEX FROM TEACHERS WHERE TID<117;FUNCTION F_count_num --函數具體定義(in_Sex in TEACHERS.SEX%TYPE)RETURN NUMBERAS out_num NUMBER;BEGIN IF in_sex='m' THEN SELECT count(SEX)INTO out_num FROM TEACHERS WHERE SEX='m'; ELSE SELECT count(SEX)INTO out_num FROM TEACHERS WHERE SEX='f'; END IF; RETURN(out_num);END F_count_num;PROCEDURE P_count_num --過程具體定義 (in_sex in TEACHERS.SEX%TYPE, out_num out NUMBER)ASBEGINIF in_sex='m' THENSELECT count(SEX) INTO out_numFROM TEACHERSWHERE SEX='m';ELSESELECT count(SEX) INTO out_numFROM TEACHERSWHERE SEX='f';END IF;END P_count_num;END my_package; --包體定義結束3.調用包包名.變數名(常量名)包名.遊標名包名.函數名(過程名)SQL>VARIABLE man_num NUMBERSQL>EXECUTE man_num:=my_package.F_count_num('M')4.刪除包DROP PACKAGE my_package