2012-07-02 49 views
0

我有一個最初以PostgreSql爲基礎構建的應用程序。在適當的時候,我們現在有要求也支持Oracle。我正在使用Liquibase進行數據庫版本管理和Hibernate ORM工具。 PostgreSql模式中的一些列具有CITEXT數據類型。它需要在數據庫端擁有相同的功能,而不需要進行任何代碼更改,以實現類似於CITEXT提供的功能。而且,我明白在這裏我將不得不在Oracle中使用VARCHAR2(xx)。將PostgreSql遷移到Oracle,處理CITEXT數據類型

回答

1

CITEXT只是在比較之前運行lower();

  1. 您可以通過隱含地包裝lower()來做文檔說明的事情,但這是冗長而固有的不安全。
  2. 添加TRIGGER以小寫形式存儲文本,但仍然不得不將您的靜態字符串保持爲小寫。
  3. Oracle和PostgreSQL都支持創建操作符。如果兩個引擎的SQL需要相同,則可以定義新的Oracle OPERATORPostgreSQL OPERATOR。這也伴隨着你的SQL將變得不便攜或在其他不理解你的操作的數據庫上產生意想不到的結果。
  4. 您可以在alter session set nls_comp=ansi;的會話中暫時更改Oracle的環境,它會將所有內容都比較爲小寫。
+0

'nls_comp = ansi'將**不**使比較不區分大小寫。你可能的意思是'nls_comp = Linguistic'連同例如'nls_sort = BINARY_CI' –

+0

感謝您的輸入。我會盡力回覆。 – devang