在 Oracle 中,当字符串与 null 变量或 null 列串联时,结果是原字符串;但是,在 PostgreSQL 中,字符串与 null 变量或 null 列的串联会产生 null 结果。如果 polar_comp_redwood_strings 参数设置为 true,则上述串联运算像 Oracle 执行的一样生成原字符串。如果 polar_comp_redwood_strings 设置为 false,则保持本机 PostgreSQL 行为。

以下示例说明不同之处。下一部分中引入的示例应用程序包含员工表。此表具有一个名为 comm 的列,对于大多数员工来说都为 null。在 polar_comp_redwood_string 设置为 false 时运行以下查询。null 列与非空字符串的串联生成的最终结果为 null,因此,只有具有佣金的员工才会显示在查询结果中。所有其他员工的输出行都为 null。

SET polar_comp_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)       

以下是 polar_comp_redwood_strings 设置为 TRUE 时执行的相同查询。在这里,null 列的值被视为空字符串。空字符串与非空字符串的串联会生成非空字符串。此结果与 Oracle 为相同查询生成的结果一致。

SET polar_comp_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)