乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      Oracle包講解

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

        (1)包的意義

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

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

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

        (2)包的定義

        包的定義形式如下:

        包說(shuō)明:

        PACKAGE 包名 IS

        --變量說(shuō)明;

        --游標(biāo)說(shuō)明;

        --例外說(shuō)明;

        --記錄說(shuō)明;

        --Plsql表說(shuō)明;

        --過(guò)程說(shuō)明;

        --函數(shù)說(shuō)明;

        END[包名];

        包體:

        PACKAGE BODY 包名 IS

        --變量名說(shuō)明;

        --游標(biāo)說(shuō)明;

        --游標(biāo)申明;

        --例外說(shuō)明;

        --記錄說(shuō)明;

        --plsql說(shuō)明;

        --過(guò)程體;

        --函數(shù)體;

        BEGIN

        --語(yǔ)句序列

        END[包名];

        其中,包名為命名包的標(biāo)識(shí)符。

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

        例 2.52: 建立包:

        .包說(shuō)明建立

        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):其中語(yǔ)句TYPE EMPRECTYP IS RECORD(emp_id. INTEGER,Salary REAL)是指用戶(hù)定義EMPRECTYP為RECORD(記錄)類(lèi)型對(duì)象。用戶(hù)定義記錄

        的一般格式是:

        TYPY 類(lèi)型名 IS RECORD

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

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

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

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

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

        一游標(biāo)所獲取的一整行。例如:

        DECLARE

        emp_rec emp% ROWTYPE;

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

        dept_rec C1%ROWTYPE;

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

        記錄名.字段名

        emp_rec.ename:=’JOHNSON’;

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

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶(hù) 評(píng)論公約

        類(lèi)似文章 更多