PL/SQL包是組邏輯相關(guān)的PL/SQL類型,變量和子程序模式對(duì)象。
程序包將有兩個(gè)強(qiáng)制性的部分:
包裝規(guī)范定義
包體或定義
規(guī)范是接口到包。它只是聲明的類型,變量,常量,異常,游標(biāo)和子程序可從封裝外部引用。換句話說,它包含關(guān)于包的內(nèi)容的所有信息,但不包括用于子程序的代碼。
置于規(guī)范的所有對(duì)象被稱為公共對(duì)象。任何子程序在封裝主體中沒有包定義但編碼被稱為私有對(duì)象。
下面的代碼片段顯示了具有單一的程序包規(guī)范定義。一個(gè)包中可以定義的全局變量和多個(gè)程序或函數(shù)。
CREATE PACKAGE cust_sal AS PROCEDURE find_sal(c_id customers.id%type); END cust_sal; /
當(dāng)上述代碼在SQL提示符執(zhí)行時(shí),它產(chǎn)生了以下結(jié)果:
Package created.
包體已經(jīng)在包定義和其他私人聲明中聲明的各種方法,這是從代碼隱藏在包外的代碼。
CREATE PACKAGE BODY語句用于創(chuàng)建包體。下面的代碼片段顯示了包體聲明上面創(chuàng)建的cust_sal包。在前面學(xué)習(xí)中,我們已經(jīng)在數(shù)據(jù)庫中創(chuàng)建了一個(gè)CUSTOMERS表 - PL/SQL變量 這一章節(jié)。
CREATE OR REPLACE PACKAGE BODY cust_sal AS PROCEDURE find_sal(c_id customers.id%TYPE) IS c_sal customers.salary%TYPE; BEGIN SELECT salary INTO c_sal FROM customers WHERE id = c_id; dbms_output.put_line('Salary: '|| c_sal); END find_sal; END cust_sal; /
當(dāng)上述代碼在SQL提示符執(zhí)行時(shí),它產(chǎn)生了以下結(jié)果:
Package body created.
訪問包元素(變量,過程或函數(shù))的語法如下:
package_name.element_name;
想想,我們已經(jīng)在上面的數(shù)據(jù)庫模式中創(chuàng)建的包,下面的程序是使用cust_sal包的find_sal方法:
DECLARE code customers.id%type := &cc_id; BEGIN cust_sal.find_sal(code); END; /
當(dāng)上面的代碼在SQL提示符下執(zhí)行,它提示輸入客戶ID,當(dāng)輸入一個(gè)ID,它會(huì)顯示相應(yīng)的薪酬如下:
Enter value for cc_id: 1 Salary: 3000 PL/SQL procedure successfully completed.
下面的程序提供了一個(gè)更為完整的方案。我們將使用存儲(chǔ)在數(shù)據(jù)庫中的CUSTOMERS表的以下記錄:
Select * from customers; +----+----------+-----+-----------+----------+ | ID | NAME | AGE | ADDRESS | SALARY | +----+----------+-----+-----------+----------+ | 1 | Ramesh | 32 | Ahmedabad | 3000.00 | | 2 | Khilan | 25 | Delhi | 3000.00 | | 3 | kaushik | 23 | Kota | 3000.00 | | 4 | Chaitali | 25 | Mumbai | 7500.00 | | 5 | Hardik | 27 | Bhopal | 9500.00 | | 6 | Komal | 22 | MP | 5500.00 | +----+----------+-----+-----------+----------+
CREATE OR REPLACE PACKAGE c_package AS -- Adds a customer PROCEDURE addCustomer(c_id customers.id%type, c_name customers.name%type, c_age customers.age%type, c_addr customers.address%type, c_sal customers.salary%type); -- Removes a customer PROCEDURE delCustomer(c_id customers.id%TYPE); --Lists all customers PROCEDURE listCustomer; END c_package; /
當(dāng)上面的代碼在SQL提示符下執(zhí)行,它會(huì)創(chuàng)建上述包,并顯示以下結(jié)果:
Package created.
CREATE OR REPLACE PACKAGE BODY c_package AS PROCEDURE addCustomer(c_id customers.id%type, c_name customers.name%type, c_age customers.age%type, c_addr customers.address%type, c_sal customers.salary%type) IS BEGIN INSERT INTO customers (id,name,age,address,salary) VALUES(c_id, c_name, c_age, c_addr, c_sal); END addCustomer; 上一篇:PL/SQL條件控制下一篇:PL/SQL比較運(yùn)算符