在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)