SQL語義兼容
EnterpriseDB 數據庫與 Oracle 數據庫能夠相互兼容的基礎在於,前者能夠識別和準確執行用 Oracle SQL 語言表示的數據庫查詢。另外,EnterpriseDB 數據庫支持與 Oracle 數據庫相同的數據類型、函數和變量,並可解決 Oracle 數據庫與 EnterpriseDB 數據庫在處理字段別名、公***同義詞、序列以及 DUAL 表方面的不兼容問題。如:
數據類型
CHAR、VARCHAR、VARCHAR2、NUMBER、CLOB、BLOB、DATE等
數據庫函數
TO_CHAR、TO_DATE、SYSDATE、DBMS_XXX等
字段別名
與Oracle相同,在EnterpriseDB企業版中設定"字段別名"時可心省略"AS"關鍵字
SEQUENCE序列
與Oracle相同,可通過seq_name.CURRVAL 和 seq_name.NEXTVAL進行操作
DUAL表
EnterpriseDB企業版支持DUAL表,與Oracle數據庫實現SQL語句兼容
等等……
PL/SQL過程語言兼容
EnterpriseDB企業版包括壹種稱為 EDB-SPL 的過程語言,該語言與 Oracle 的 PL/SQL 過程語言相匹配。與 PL/SQL 類似,SPL 是壹種高效、塊狀結構的過程編程語言,可用於編寫自定義過程、函數和觸發器。EnterpriseDB SPL 和 Oracle PL/SQL 之間極大的相似性還使 EnterpriseDB企業版數據庫能夠支持 Oracle 式的過程包、函數或變量。
塊結構
與 PL/SQL 壹樣,SPL 過程、函數和觸發器具有同樣的塊結構。壹個塊由最多三部分組成 - 壹個可選的聲明部分、壹個強制可執行程序部分以及壹個可選的異常部分。壹個塊至少必須有壹個可執行程序部分,該部分包含壹個或多個介於關鍵字 BEGIN 和 END 之間的過程語句。
數據庫包
EnterpriseDB企業版數據庫支持 Oracle 式的數據庫包。包是壹種構造,用於構建可復用代碼和采用面向對象的設計技術。包是壹組通過數據庫中通用包名稱來識別的相關數據庫對象的集合。這些數據庫對象包括過程、函數和變量。
與Oracle數據庫壹樣,EnterpriseDB企業版數據庫包有以下兩個主要部分組成:
● 包規範:這是包含公***過程、函數和變量的公***接口,這些過程、函數和變量可以在包外由其他程序和應用程序引用。
● 包體:包體包括在包規範中聲明的過程和函數的實施邏輯,以及對不能由包以外的其他程序和應用程序訪問的私有變量、過程和函數的聲明以及邏輯。
過程
EnterpriseDB SPL 中的過程與 Oracle PL/SQL 中的過程使用方式相同。過程是壹些可作為單獨程序語句調用的程序。調用的時候,過程可以有選擇地以輸入參數的形式接收來自調用程序的值,並有選擇地以輸出 參數的形式向調用程序返回值。通過在 EnterpriseDB 數據庫中輸入過程代碼,可將過程存儲到數據庫中。然後,可以通過其他程序調用該過程。
函數
EnterpriseDB SPL 中的函數與 Oracle PL/SQL 中的函數使用方式相同。函數是可作為表達式調用的程序。計算完成後,函數會返回壹個值,該值在該函數所嵌入的表達式中被替代。函數可以有選擇地以輸入參數 的形式采用來自調用程序的值。除了返回值以外, 函數還可以有選擇地以輸出參數的形式向調用程序返回其他值。然而,在函數中使用輸出參數並非壹種值得提倡的編程方法。函數可用於語句中任何會出現表達式的 地方。
觸發器
EnterpriseDB SPL 中的觸發器與 Oracle PL/SQL 中的觸發器使用方式相同。觸發器是壹個代碼塊,該代碼塊具有給定的名稱,與表相關聯,被存儲在數據庫中。當發生某些針對表的事件時,代碼塊即被執行。當代 碼塊被執行時,即形象地稱觸發器被"觸發"。
與 Oracle 數據庫類似,EnterpriseDB企業版支持行級觸發器和語句級觸發器。對於受觸發事件影響的每壹行,行級觸發器將被"觸發"壹次。與此相對應,對於每條觸發語句,語句級觸發器將觸發壹次,而無需考慮受觸發事件影響的行的數量。
和 Oracle 數據庫壹樣,對於語句級觸發器,可以在觸發語句之前或之後由 EnterpriseDB企業版執行觸發器代碼塊,對於行級觸發器,可以在受觸發事件影響之前或之後由 EnterpriseDB企業版執行觸發器代碼塊。
匿名塊
在 EnterpriseDB企業版數據庫中,過程代碼塊可以像在 Oracle 數據庫中壹樣,被方便地執行。這類代碼塊稱為匿名塊。匿名塊是未命名的,並且未被存儲在數據庫中。可以從應用程序緩沖區執行和刪除匿名塊,除非重新在應用 程序中輸入塊代碼,否則匿名塊不可被再次執行。對於快速、壹次性程序(如測試程序),匿名塊非常有用。
數據詞典視圖
EnterpriseDB企業版提供了針對其數據詞典的視圖,這些視圖與通常使用的 Oracle 數據詞典視圖非常像。這些視圖使熟悉 Oracle 數據庫的數據庫管理員和開發人員能夠快速查找詞典信息,而無需了解新的數據詞典格式。
SQL*Plus工具兼容
EDB*Plus是壹個工具程序,它提供壹個命令行方式的用戶界面,用於訪問 EnterpriseDB企業版。在EDB*Plus中,可以使用標準SQL命令,SPL匿名代碼塊,和EDB*Plus命令。EDB*Plus 命令與Oracle 的SQL*Plus命令兼容,並且提供各種功能,包括:
● 查詢某些數據庫對象
● 執行存儲過程
● 對SQL命令的輸出結果進行格式化
● 執行批量處理腳本
● 記錄輸出
SQL*Load快速寫入兼容
EDB*Loader的壹些特性可以改善加載文本文件(text)到數據庫的性能。EDB的標準加載命令是"COPY",但是它有壹些重要的限制使得加載的時間明顯增加。
第壹個限制就是"COPY"命令不能處理固定長度格式的文件(fixed width file formats)。但是許多文件都是這種格式的,要使用EnterpriseDB數據庫,這些文件就必須被轉換成不受限制的文件格式,這就導致了文件從底層被重寫了兩次。
另壹個主要的限制就是"COPY"命令缺少錯誤處理機制。當使用"COPY"命令時,如果要加載文件中的某壹行是不合法的,則所有的行都將被拋棄,並且整個文件都要被重新加載。
EDB*Loader可以將不合法的記錄轉移到discard文件中,從而使得發生錯誤時,整個文件的處理仍可繼續。這樣用戶可以在批量加載處理完成後,單獨地檢查discard文件中的問題數據。
然而,EDB*Loader最具戲劇性的功能還是它的直接路徑加載(Direct Path load),直接路徑加載忽略了影響批量處理性能的大量處理步驟,因此性能更好,但它也需要遵循完整的原子性操作,也即要麽全做,要麽壹點也不做。
直接路徑加載利用控制文件中定義的列的描述信息來解析輸入的行,然後將文件中的數據轉換為列的數據類型,並創建壹個內部數據結構。之後,這個數據結構將直 接被格式化成EnterpriseDB數據庫的數據塊。新創建的塊又直接寫入到數據目錄中,從而略過了許多處理過程,因此能夠更快地加載。
Copy加載和直接路徑加載對比
DBLink鏈接兼容
壹個數據庫鏈接(Database Link)定義了從壹個數據庫服務器到另壹個數據庫服務器的通信信道。使用數據庫鏈接的好處是:它允許用戶能夠訪問壹個遠程數據庫的對象,這樣,該用戶便被綁定到遠程對象的用戶權限集中。
數據庫鏈接同時也是分布式數據庫的基礎,應用程序可以同時訪問分布式環境中的多個數據庫。例如,壹個客戶端可以從本地庫中發起壹個簡單的查詢,而連接遠程數據庫的表。數據庫的位置和使用的平臺對於客戶端應用程序來說是透明的。