1

データベースをOracleからSQLServerに移動しています。私のクエリは、Oracleのnvl関数を多用しています。SQL Serverでは、使用する関数はisnull()です。可能であれば、Oracleを使用したまま、isnull()を使用するようにクエリを変更して、クエリの準備を開始したいと思います。私の考えは、スキーマにラッパー関数isnull()を作成し、代わりにその関数を使用するようにクエリを変更することです。そうすれば、データベースプラットフォームを切り替えるときに、クエリはすでに新しい関数を使用しています。

任意のデータ型を受け入れて返すisnull()と呼ばれるラッパー関数をOracleで作成する方法はありますか?または、予想されるすべてのデータ型に対してオーバーロードされた複数のisnull()宣言が必要ですか?

4

2 に答える 2

9

の構文はOracleとSQLServerの両方で同じであるため、別のアプローチは、のCOALESCE代わりに使用することです。それでも、OracleとSQL Serverの両方で効率的に機能する(またはまったく機能しない)同一のSQLを使用するという目標(それが目標である場合)は現実的ではない場合があります。NVLCOALESCE

于 2012-12-18T00:15:11.597 に答える
1

PL / SQLで同じ関数に対して複数のオーバーロードを設定する唯一の方法は、それらをパッケージに作成することです。IsNullさまざまなデータ型を受け入れて返す、さまざまなオーバーロードされた関数を含むパッケージを作成し、それらをクエリで使用できます。もちろん、それはあなたがあなたのコードにパッケージ名を含まなければならないことを意味します。SQL Serverに移行するときにパッケージ名を削除するのは簡単ですが、正確な移行ではありません。

于 2012-12-17T23:37:35.820 に答える