私はPostgreSqlを念頭に置いて最初に構築されたアプリケーションを持っています。やがて、Oracleもサポートする必要があります。DBバージョン管理とHibernateORMツールにLiquibaseを使用しています。PostgreSqlスキーマの一部の列にはCITEXTデータ型があります。CITEXTが提供するものと同様の機能を実現するには、コードを変更せずに、データベース側で同じ機能を使用する必要があります。そして、ここでは、OracleでVARCHAR2(xx)を使用する必要があることを理解しています。
1 に答える
2
CITEXT
単にlower()
比較の前に実行します。
- 暗黙的にラッピングすることでドキュメントに記載されていることを実行できますが
lower()
、それは冗長で本質的に安全ではありません。 - テキストを小文字で格納するTRIGGERを追加しますが、静的文字列を小文字のままにする必要があります。
- OracleとPostgreSQLはどちらも、演算子の作成をサポートしています。SQLを両方のエンジンで同じにする必要がある場合は、新しいOracleOPERATORとPostgreSQLOPERATORを定義できます。これには、SQLの移植性が低下するか、演算子を理解していない他のデータベースで予期しない結果が生じるというキャビエットも含まれています。
alter session set nls_comp=ansi;
すべてを小文字で比較するセッションで、Oracleの環境を一時的に変更できます。
于 2012-07-03T13:05:39.330 に答える