1. 程式人生 > >Orafce整合&調研

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型別的加減