【问题标题】:how to use set null and concatenate operator together in Oracle?如何在 Oracle 中同时使用 set null 和 concatenate 运算符?
【发布时间】:2019-07-24 13:47:52
【问题描述】:

我正在尝试使用以下命令将数据从 Oracle 导出到 CSV:

SET ECHO OFF 
SET NEWPAGE 0 
SET SPACE 0 
SET PAGESIZE 0 
SET FEED OFF
SET HEAD OFF
SET null NULL
SPOOL STUDENT.CSV
SELECT ID ||’,’|| NAME ||’,’|| ADMISSION_DATE FROM STUDENT; 
SPOOL OFF;

但是,当使用连接运算符(||','||) 和设置 null NULL 选项时,它会将 null 值保留为 CSV 文件中的空白字符串 (''),而不是用 NULL 替换它。

有人能告诉我如何一起使用 set null 和 concatenate 运算符吗?

【问题讨论】:

  • 你需要另一个标签来表明你在说什么 shell。

标签: bash oracle shell


【解决方案1】:

SQL*Plus 命令(如set null)在这种情况下无济于事,因为在 SQL*Plus 可以看到数据时空值已经消失。

set null NULL
select 'a' || null || 'b' from dual; -- returns "ab"

如果你想替换空值,你必须在之前连接。因此,您需要将所有可为空的列包装在 NVL 中,例如

select 'a' || nvl(null, 'NULL') || 'b' from dual; -- returns "aNULLb"

或者,您可以尝试使用colsep to put the commas in your CSV,但这会添加一堆您可能不想要的空格。

set null NULL
set colsep ,
select 'a', null, 'b' from dual; -- returns "a  ,NULL,b  "

如果您可以选择切换到 Oracle 的 SQLcl 客户端,it makes it much easier 从查询中生成正确的 CSV 文件。

set null NULL
select /*csv*/ 'a', null, 'b' from dual; -- returns "a","NULL","b"

【讨论】:

    猜你喜欢
    • 2015-11-23
    • 2013-01-05
    • 2013-11-23
    • 2019-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-02
    • 1970-01-01
    相关资源
    最近更新 更多