Oracle では、文字列が null 変数または null 列と連結されると、結果は元の文字列になります。 しかし、PostgreSQLでは、文字列を null 変数または null 列と連結すると、null の結果が生成されます。 edb_redwood_strings パラメーターが TRUE に設定されている場合、前述の連結操作では、Oracleと 同じように元の文字列になります。 edb_redwood_strings パラメーターが FALSEに 設定されている場合、PostgreSQL 本来の動作が維持されます。

次の例は、その違いを示しています。 次のセクションで紹介するサンプルアプリケーションには、従業員のテーブルが含まれています。 このテーブルには comm という名前の列があり、ほとんどの従業員に対して値は null です。 次のクエリでは、edb_redwood_string が FALSE に設定されています。 空でない文字列を含む null 列を連結すると、最終結果として null が生成されるため、歩合給が発生した従業員のみがクエリ結果に表示されます。 他のすべての従業員の出力行は null です。

SET edb_redwood_strings TO off;

SELECT RPAD(ename,10) || ' ' || TO_CHAR(sal,'99,999.99') || ' ' ||
TO_CHAR(comm,'99,999.99') "EMPLOYEE COMPENSATION" FROM emp;

      EMPLOYEE COMPENSATION
----------------------------------

 ALLEN        1,600.00     300.00
 WARD         1,250.00     500.00

 MARTIN       1,250.00   1,400.00

 

 

 TURNER       1,500.00        .00

 

 
(14 rows)       

次の例は、edb_redwood_strings が TRUE に設定されている場合に実行される同じクエリです。 null 列の値は空の文字列として扱われます。 空の文字列と空でない文字列を連結すると、空でない文字列が生成されます。 この結果は、同じクエリに対して Oracle が生成する結果と一致しています。

SET edb_redwood_strings TO on;

SELECT RPAD(ename,10) || ' ' || TO_CHAR(sal,'99,999.99') || ' ' ||
TO_CHAR(comm,'99,999.99') "EMPLOYEE COMPENSATION" FROM emp;

      EMPLOYEE COMPENSATION
----------------------------------
 SMITH          800.00
 ALLEN        1,600.00     300.00
 WARD         1,250.00     500.00
 JONES        2,975.00
 MARTIN       1,250.00   1,400.00
 BLAKE        2,850.00
 CLARK        2,450.00
 SCOTT        3,000.00
 KING         5,000.00
 TURNER       1,500.00        .00
 ADAMS        1,100.00
 JAMES          950.00
 FORD         3,000.00
 MILLER       1,300.00
(14 rows)