日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

Oracle包講解

 木有銀 2008-09-08
包 (package)

  (1)包的意義

  PL/SQL為了滿足程序模塊化的需要,除了塊(block)和子程序結(jié)構外,還引入了包的構造。

  包是一種數(shù)據(jù)庫對象,將邏輯上相關的PL/SQL類型、對象和子程序組合成一個更大的單位。包有兩個部分:包說明(specification)和包體(body)。說明部分是為應用程序的接口,它申明類型、常量、例外、游標和可用的子程序。體定義游標和子程序,實現(xiàn)說明。應用程序僅對包說明中的申明是可見的和可存取。如果ORACLE具有Procedure選件,包可以編譯、存貯在ORACLE數(shù)據(jù)庫中,其內(nèi)容可為許多應用共享。當用戶第一次調(diào)用一包裝的子程序時,整個包裝入到內(nèi)存,所以在以后對包中子程序調(diào)用時,不再需要I/O操作,故包可提高效率和改進性能。

  PL/SQL的包具有信息隱蔽性(information hiding),僅在算法和數(shù)據(jù)結(jié)構設計有關層可見。在前面講到的過程中,可將過程說明和過程體組成一個程序單位。也可將過程說明與它的過程體分開,在這種情況下,將過程放置在一個包中,可隱蔽實現(xiàn)的細節(jié)。也可在包中定義過程,而該過程在包說明中沒有定義過程說明,這樣定義的過程僅在包內(nèi)使用。

  (2)包的定義

  包的定義形式如下:

  包說明:

  PACKAGE 包名 IS

  --變量說明;

  --游標說明;

  --例外說明;

  --記錄說明;

  --Plsql表說明;

  --過程說明;

  --函數(shù)說明;

  END[包名];

  包體:

  PACKAGE BODY 包名 IS

  --變量名說明;

  --游標說明;

  --游標申明;

  --例外說明;

  --記錄說明;

  --plsql說明;

  --過程體;

  --函數(shù)體;

  BEGIN

  --語句序列

  END[包名];

  其中,包名為命名包的標識符。

  包不能嵌入在PL/SQL塊或子程序中,然而使用支持PL/SQL的任何工具可定義包。要使包為全體使用,必須用CREATE命令建立,存貯在一個ORACLE數(shù)據(jù)庫中。可在SQL*PLUS、SQL*DBA或從ORACLE預編譯宿主程序中利用CREATE PACKAGE和CREATE PACKAGE BODY 語句建立。

  例 2.52: 建立包:

  .包說明建立

  CREATE PACKAGE emp_actions AS

  TYPE EMPRECTYP IS RECORD(emp_id INTEGER,salary REAL);

  CURSOR desc_salary(emp_id NUMBER)RETURN EMPRECTYP;

  PROCEDURE hire_employee

  (ename CHAR,

  job CHAR,

  sal NUMBER,

  mgr NUMBER,

  comm NUMBER,

  deptno NUMBER;

  PROCEDURE fire_employee(emp_id NUMBER);

  END emp_actions;

  (A):其中語句TYPE EMPRECTYP IS RECORD(emp_id. INTEGER,Salary REAL)是指用戶定義EMPRECTYP為RECORD(記錄)類型對象。用戶定義記錄

  的一般格式是:

  TYPY 類型名 IS RECORD

  (字段名1{字段類型|變量名%TYPE|表名.列名%TYPE|表名%ROWTYPE}[NOT NULL],

  字段名2{字段類型|變量名%TYPE|表名.列名%TYPE|表名%ROWTYPE}[NOT NULL],...);其中:類型名為類型說明符,可在記錄說明中使用。字段

  類型為PL/SQL允許的任何數(shù)據(jù)類型,包括RECORD類型和TABLE(表)類型??捎?TYPE或%ROWTYPE屬性指定一字段的數(shù)據(jù)類型。

  利用%TYPE屬性可提供變量,常量或數(shù)據(jù)庫列的數(shù)據(jù)類型。例如變量my_dname是同SCOTT的DEPT表的DNAME列類型相同,則可如下定義:

  my_dname SCOTT.dept.danme%TYPE ,%ROWTYPE屬性提供一記錄類型,它表示一表(或視圖)中的一行。記錄可存貯由表所選擇的一整行或者由

  一游標所獲取的一整行。例如:

  DECLARE

  emp_rec emp% ROWTYPE;

  CURSOR C1 IS SELECT deptno,dname,loc FROM dept;

  dept_rec C1%ROWTYPE;

  其中 emp_rec記錄可存貯從表EMP中選擇的行,dept_rec記錄可存貯由C1游標所獲取的行。這樣定義的記錄中的字段與行中列有相同的名和相同數(shù)據(jù)類型。記錄中的字段可以下列形式引用:

  記錄名.字段名

  emp_rec.ename:=’JOHNSON’;

    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多