Orafce整合&調研
Orafce是PostgreSQL的一個擴充套件,主要是為了在PostgreSQL中相容Oracle的部分語法、函式、字典表等。
目錄
編譯安裝
版本:Orafce 3.6 + PostgreSQL 10.5
編譯安裝:
解壓後進入原始碼目錄執行 make & make install
進入postgresql執行 create extension orafce
【注意事項】
下載的原始碼中,orafce--3.6.sql檔案中下面這段sql,需要將 'BASE_TABLE' 改成 'BASE TABLE' 再編譯安裝
create view oracle.user_tables as
select table_name
from information_schema.tables
where table_type = 'BASE_TABLE';
支援特性
Orafce支援了oracle的一千多個函式、十幾個系統表、部分資料型別、十幾個常用包、部分操作符等。
資料型別
Oracle型別 | 對應PostgreSQL型別 | 使用時的型別名稱 |
varchar2 | varchar | varchar2 |
nvarchar2 | varchar | nvarchar2 |
date | timestamp(0) | oracle.date |
注:由於PostgreSQL的date型別只有日期沒有時間,但Oracle的date型別包含日期和時間,所以Orafce將oracle的date型別用PostgreSQL的timestamp(0)表示,且為了避免與PostgreSQL原生的date型別衝突,使用時需要用oracle.date。
系統表
名稱 | oracle中該表的內容 | orafce缺少的內容 |
dual | 虛擬表,用來構成select的語法規則 | 無缺失 |
user_tab_columns | 儲存當前使用者的表、檢視和Clusters中的列等資訊,用於oracle獲取表結構 | 缺少預設值、自增列相關的資訊 |
user_tables | 儲存當前使用者的關係表,包含表的基本資訊和統計資訊 | 只有表名,其他都沒有 |
user_cons_columns | owner、約束名、表名、列名、position | 缺少owner、position |
user_constraints | 儲存當前使用者擁有的所有約束的定義,包含 |
只有約束名、型別、表名、索引名; 缺少搜尋條件、owner、刪除條件、狀態等等 |
product_component_version | 儲存元件的版本、名稱、狀態資訊 | 無缺失 |
user_objects | 儲存當前使用者擁有的所有物件 | 缺少時間戳、標記等資訊 |
user_procedures | 儲存所有函式和過程及其相關屬性 | 只有物件名稱 |
user_source | 儲存當前使用者擁有的儲存物件的文字源 | 無缺失 |
user_views | 儲存當前使用者擁有的檢視資訊 | 只有檢視名稱和owner,其他都沒有 |
user_ind_columns | 儲存當前使用者擁有的索引的列 | 只有表名、索引名、列名,其他都沒有 |
函式
PostgreSQL中,系統表pg_proc用來儲存函式或儲存過程的資訊,對比安裝Orafce前後字典表中的資料行數,可以知道Orafce建立了大約1400多個函式
新建立的函式主要包含以下內容:
- 字串處理:擷取、填充、轉換
- 獲取資料庫資訊:獲取版本號、平臺資訊、狀態
- 日期處理:日期轉換、加減、日期範圍區間判斷
- 型別轉換:字串、日期、數值之間的轉換
常用包
Orafce使用PostgreSQL的schema和函式的方式來實現Oracle包中的功能:
注:訪問其他schema的表或函式時,如果不希望在訪問的物件前加上schema名稱,可以通過修改search_path來達到目的:
ALTER database DBNAME SET search_path TO “$USER”, public, mySchema;
操作符
Orafce過載了+ - 操作符,用於支援oracle.date型別與smallint、int、bigint、numeric型別的加減