資料庫包
一、什麼是PL/SQL包
包就是一個把各種邏輯相關的類型、常量、變數、異常和子程序組合在一起的模式對象。包通常由兩個部分組成:包說明和包體,但有時包體是不需要的。說明(簡寫為spec)是應用程序介面;它聲明了可用的類型、變數、常量、異常、游標和子程序,包體部分完全定義游標和子程序,並對說明中的內容加以實現。
如下例所示,我們可以認為說明部分是一個可選介面,而包體是一個"黑盒"。我們可以調試、增強或替換一個包體而不同改變介面(包說明)。
我們可以從SQL*Plus中使用CREATE PACKAGE語句來創建一個包。語法如下:
CREATE [OR REPLACE] PACKAGE package_name
[AUTHID {CURRENT_USER | DEFINER}]
{IS | AS}
[PRAGMA SERIALLY_REUSABLE;]
[collection_type_definition ...]
[record_type_definition ...]
[subtype_definition ...]
[collection_declaration ...]
[constant_declaration ...]
[exception_declaration ...]
[object_declaration ...]
[record_declaration ...]
[variable_declaration ...]
[cursor_spec ...]
[function_spec ...]
[procere_spec ...]
[call_spec ...]
[PRAGMA RESTRICT_REFERENCES(assertions) ...]
END [package_name];
[CREATE [OR REPLACE] PACKAGE BODY package_name {IS | AS}
[PRAGMA SERIALLY_REUSABLE;]
[collection_type_definition ...]
[record_type_definition ...]
[subtype_definition ...]
[collection_declaration ...]
[constant_declaration ...]
[exception_declaration ...]
[object_declaration ...]
[record_declaration ...]
[variable_declaration ...]
[cursor_body ...]
[function_spec ...]
[procere_spec ...]
[call_spec ...]
[BEGIN
sequence_of_statements]
END [package_name];]
在說明部分聲明的內容都是公有的,對應用程序是可見的。我們必須在所有的其他內容(除了用於為一個特殊的函數命名的編譯指示;這樣的編譯指示必須跟在函數說明之後)聲明之後才可以聲明子程序。
包體中的內容有私有的,它實現了說明部分定義的細節內容,並且對應用程序是不可見的。緊跟著包體聲明部分的是一個可選的初始化部分,它用於初始化包中的變數等。
AUTHID語句決定了是否是所有的打包子程序都按定義者許可權(默認)或調用者許可權執行,其中涉及到的模式對象是在定義者的模式中解析還是在調用者的模式中解析。
一個調用說明能讓我們在Oracle數據詞典中發布一個Java方法或外部C函數。調用說明靠把程序的名稱、參數類型和返回類型映射到它們的SQL副本(SQL counterpart)中來發布程序。
1、PL/SQL包舉例
在下面的例子中,我們把一個記錄類型、游標和兩個employment過程進行打包。要注意,過程hire_employee使用資料庫序列empno_seq和函數SYSDATE分別插入到欄位雇員編號和僱傭日期。
CREATE OR REPLACE PACKAGE emp_actions AS -- spec
TYPE emprectyp IS RECORD(
emp_id INT,
salary REAL
);
CURSOR desc_salary RETURN emprectyp;
PROCEDURE hire_employee(
ename VARCHAR2,
job VARCHAR2,
mgr NUMBER,
sal NUMBER,
comm NUMBER,
deptno NUMBER
);
PROCEDURE fire_employee(emp_id NUMBER);
END emp_actions;
CREATE OR REPLACE PACKAGE BODY emp_actions AS -- body
CURSOR desc_salary RETURN emprectyp IS
SELECT empno, sal
FROM emp
ORDER BY sal DESC;
PROCEDURE hire_employee(
ename VARCHAR2,
job VARCHAR2,
mgr NUMBER,
sal NUMBER,
comm NUMBER,
deptno NUMBER
) IS
BEGIN
INSERT INTO emp
VALUES (empno_seq.NEXTVAL,
ename,
job,
mgr,
SYSDATE,
sal,
comm,
deptno);
END hire_employee;
PROCEDURE fire_employee(emp_id NUMBER) IS
BEGIN
DELETE FROM emp
WHERE empno = emp_id;
END fire_employee;
END emp_actions;
只有在包說明部分的聲明內容對應用程序才是可見可訪問的;包體的詳細實現是不可見不可訪問的。所以,我們可以在不重新編譯調用程序的前提下修改包體(實現)。
二、PL/SQL包的優點
包提供了幾個優點:模塊化、方便應用程序設計、信息隱藏、附加功能和良好的性能。
模塊化
包能讓我們把邏輯相關的類型、常量、變數、異常和子程序等放到一個命名的PL/SQL模塊中。每一個包都容易理解,包與包之間介面簡單、清晰。這將有助於程序開發。
輕松的程序設計
設計應用程序時,我們首先要確定的是包說明中的介面信息。我們可以在沒有包體的條件下編寫並編譯說明部分。然後引用該包的存儲子程序也會被編譯。在完成整個應用程序之前,我們是不需要完全實現包體部分的。
信息隱藏
有了包,我們就可以指定哪些類型、常量、變數、異常和子程序等是公有(可見和可訪問)或私有(隱藏和不可訪問)。例如,如果一個包里包含了四個子程序,其中三個是公有的一個是私有的。包就會隱藏私有子程序的實現,這樣的話,如果實現內容發生改變,受到影響的只有包本身(不是我們的應用程序)。同樣,對用戶隱藏實現細節也能保證包的完整性。
附加功能
打包公有變數和游標在一個會話期會一直存在。所以,它們可以被當前環境下的所有子程序共享。並且它們允許我們跨事務來維護數據而不用把它保存在資料庫中。
良好的性能
在我們首次調用打包子程序時,整個包就會被載入到內存中。所以,以後調用包中的相關子程序時,就不需要再次讀取磁碟了。包能阻塞級聯依賴,這樣就能避免不必要的編譯。例如,如果我們改變打包函數的實現,Oracle不需要重新編譯調用子程序,因為它們並不依賴於包體。
三、理解包說明
包說明包括了公有聲明。這些聲明的作用於對於資料庫模式來說是本地的,對於包來說是全局的。所以,被聲明的內容可以從應用程序中和包的任何地方訪問。下圖演示了包的作用范圍:
說明中列出了包中對應用程序所有可用的資源。例如,下面的聲明演示了一個接受INTEGER類型的參數並返回一個INTEGER結果的函數fac:
FUNCTION fac (n INTEGER) RETURN INTEGER; -- returns n!
這些就是我們要調用的函數的所有信息。我們並不需要考慮它的實現細節(如,是使用迭代還是遞歸)。
只有子程序和游標有實現部分。所以,如果一個說明只有類型、常量、變數、異常的聲明和調用說明,那麼包體就沒有必要的了。下面就是一個沒有包體的包:
CREATE PACKAGE trans_data AS -- bodiless package
TYPE timerec IS RECORD(
minutes SMALLINT,
hours SMALLINT
);
TYPE transrec IS RECORD(
CATEGORY VARCHAR2,
ACCOUNT INT,
amount REAL,
time_of timerec
);
minimum_balance CONSTANT REAL := 10.00;
number_processed INT;
insufficient_funds EXCEPTION;
END trans_data;
包trans_data不需要包體,因為類型、常量、變數和異常並沒有實現部分。這樣的包能讓我們定義全局變數,可供子程序和資料庫觸發器使用。
1、引用包的內容
如果要引用包內聲明的類型、常量、變數、異常和子程序等,就得使用點標識:
package_name.type_name
package_name.item_name
package_name.subprogram_name
package_name.call_spec_name
我們可以從資料庫觸發器、存儲子程序、3GL(第三代程序語言)應用程序和各種Oracle工具中引用包中的內容。例如,我們可以從SQL*Plus中調用過程hire_employee:
SQL> CALL emp_actions.hire_employee('TATE', 'CLERK', ...);
下例中,我們可以從一個嵌入到Pro*C的匿名PL/SQL塊調用同樣的過程。實參emp_name和job_title是主變數(即聲明在主環境中的變數)。
EXEC SQL EXECUTE
BEGIN
emp_actions.hire_employee(:emp_name, :job_title, ...);
約束
我們不能直接或間接地引用遠程打包變數。例如,我們不能遠程調用下面的過程,因為它在參數初始化子句中引用了打包變數:
CREATE PACKAGE random AS
seed NUMBER;
PROCEDURE initialize (starter IN NUMBER := seed, ...);
同樣,我們也不能在包的內部引用主變數。
^ ^希望對你有幫助
2. 對資料庫進行打包簽名,用於存儲資料庫格式是什麼
摘要 您好,對資料庫進行打包簽名,用於存儲資料庫文件格式是:Access 2007。
3. 國泰安資料庫壓縮包下載不下來
你沒有安裝壓縮軟體,去網上下一個winrar,再安裝就可以了.
有可能你下載的不正確,下載的就是網頁,這個是很有可能的,不懂的人經常犯這個錯2.就是你的電腦可能沒有安裝WINRAR,你的RAR文件默認設置了始終用IEEXPLORER.EXE打開,有可能圖標會變成網頁的樣子首先打開我的電腦,在工具菜單的文件夾選項中,查看里找到,隱藏已知文件類型的擴展名的對勾去掉,然後看看你下載的文件擴展名是不是RAR,如果不是說明你下載的不正確
4. 資料庫打包的目的是什麼
資料庫打包的目的是組織數據、維護數據、控制數據、利用數據。
5. 資料庫包含有哪些
mysql資料庫?資料庫系統一般由資料庫、資料庫管理系統(及其開發工具)、應用系統、 資料庫管理員和用戶構成
6. 資料庫的類型都有哪些
資料庫有兩種類型,分別是關系型資料庫與非關系型資料庫。
資料庫,簡而言之可視為電子化的文件櫃——存儲電子文件的處所,用戶可以對文件中的數據進行新增、截取、更新、刪除等操作。
關系型資料庫主要有:
Oracle、DB2、Microsoft SQL Server、Microsoft Access、MySQL等等。
非關系型資料庫主要有:
NoSql、Cloudant、MongoDb、redis、HBase等等。
(6)資料庫包擴展閱讀:
非關系型資料庫的優勢:
1、性能高:NOSQL是基於鍵值對的,可以想像成表中的主鍵和值的對應關系,而且不需要經過SQL層的解析,所以性能非常高。
2、可擴展性好:同樣也是因為基於鍵值對,數據之間沒有耦合性,所以非常容易水平擴展。
關系型資料庫的優勢:
1、可以復雜查詢:可以用SQL語句方便的在一個表以及多個表之間做非常復雜的數據查詢。
2、事務支持良好:使得對於安全性能很高的數據訪問要求得以實現。
7. 資料庫主要分為哪兩種類型
資料庫主要分為關系資料庫和非關系型資料庫(NoSQL)。
1、關系資料庫
關系型資料庫,存儲的格式可以直觀地反映實體間的關系。關系型資料庫和常見的表格比較相似,關系型資料庫中表與表之間是有很多復雜的關聯關系的。
常見的關系型資料庫有Mysql,SqlServer等。在輕量或者小型的應用中,使用不同的關系型資料庫對系統的性能影響不大,但是在構建大型應用時,則需要根據應用的業務需求和性能需求,選擇合適的關系型資料庫。
2、非關系型資料庫(NoSQL)
指分布式的、非關系型的、不保證遵循ACID原則的數據存儲系統。NoSQL資料庫技術與CAP理論、一致性哈希演算法有密切關系。NoSQL資料庫適合追求速度和可擴展性、業務多變的應用場景。
(7)資料庫包擴展閱讀
關系資料庫分為兩類:一類是桌面資料庫,例如Access、FoxPro和dBase等;另一類是客戶/伺服器資料庫,例如SQL Server、Oracle和Sybase等。桌面資料庫用於小型的、單機的應用程序,它不需要網路和伺服器,實現起來比較方便,但它只提供數據的存取功能。
客戶/伺服器資料庫主要適用於大型的、多用戶的資料庫管理系統,應用程序包括兩部分:一部分駐留在客戶機上,用於向用戶顯示信息及實現與用戶的交互;另一部分駐留在伺服器中,主要用來實現對資料庫的操作和對數據的計算處理。
8. sqlite資料庫jar包在哪裡
在CLASSPATH環境變數中。
MYSQL提供一個JDBC連接器,是第三方類庫,把它下載下來,把解壓後的.JAR文件地址添加到CLASSPATH環境變數中,就行了。寫代碼時載入CLASS.FORNAME就行了。
jar包就是別人已經寫好的一些類,然後將這些類進行打包,你可以將這些jar包引入你的項目中,然後就可以直接使用這些jar包中的類和屬性以及方法。JAR(Java ARchive)是將一系列文件合並到單個壓縮文件里,就象Zip那樣。然而,同Java中其他任何東西一樣,JAR文件是跨平台的,所以不必關心涉及具體平台的問題。涉及網際網路應用時,JAR文件顯得特別有用。在JAR文件之前,Web瀏覽器必須重復多次請求Web伺服器,以便下載完構成一個「程序片」(Applet)的所有文件。除此以外,每個文件都是未經壓縮的。但在將所有這些文件合並到一個JAR文件里以後,只需向遠程伺服器發出一次請求即可。同時,由於採用了壓縮技術,所以可在更短的時間里獲得全部數據。
9. 電信的PET包和資料庫包。這個方向的數據費在哪裡使用
您好,指定的流量僅在like clients和like to see traffic包中使用。方向性流量只用於交通。
10. 資料庫中的包和集有什麼區別
集合操作自動消除重復
包操作是不消除重復的
比如R={A,B,B}T={A,B}
集合並 {A,B}包並{A,A,B,B,B}
其他操作類似