古い Oracle コードを PostgreSQL 9.2 に移植しています。Oracle NVL() には何百もの呼び出しがあるため、同等の機能を提供するマッピング関数を作成しました。これは些細なことのはずですが、私にはまったく明らかではない理由で失敗しています。
CREATE OR REPLACE FUNCTION nvl(expr1 text, expr2 text)
RETURNS text AS
$BODY$
BEGIN
RETURN COALESCE( expr1, expr2 );
END;
$BODY$
LANGUAGE plpgsql STRICT IMMUTABLE;
さまざまな入力パラメータ タイプに対して定義された NVL のバリアントがありますが、テストのために、これ以外はすべて削除しました。削除すると不明な関数エラーが発生するため、これが呼び出されていると確信しています。
以下は、このデータベースに対するいくつかのクエリの結果であり、問題を示しています。
# select nvl(null, 'N/A');
nvl
-----
(1 row)
# select coalesce(nvl(null, 'N/A'), 'ITS STILL NULL???');
coalesce
-------------------
ITS STILL NULL???
(1 row)
上記から、Coalesce はスタンドアローンで正常に機能することがわかりますが、私の機能では機能しません。
私はPostgreSQLのごく最近のバージョンを使用しています:
# select version();
PostgreSQL 9.2.4 on x86_64-unknown-linux-gnu, compiled by gcc (GCC) 4.4.7 20120
313 (Red Hat 4.4.7-3), 64-bit
手がかりはありますか?