我正在设计一个工作流程,以将数据从Oracle数据库导出到另一个系统。不幸的是,我遇到了一个棘手的问题。目标系统使用基于XML的导入,并且任何数据输入都必须采用非常特殊的格式。某些字段不可为空,并且必须在其中必须包含数据,即使它只是单词“ none”也是如此。我正在使用的报表工具(eVisions Argos)可以通过使用If语句有条件地打印出无(如果字段为空)一词来处理此问题。
这是问题所在。原始数据库中几列中的某些数据不一致。有问题的大多数字段都不为空,但包含两个空格(不知道为什么-我不是DBA)。例外是少数字段实际上为空,其中一些字段包含数据。
有没有一种方法可以构造我的查询,以便在字段中选择数据(如果有的话),否则可以输入空值?我尝试了这一点(由于冗长,排除了完整查询):
SELECT
...
CASE perm_address2
WHEN ' ' THEN null
WHEN null THEN null
ELSE (select perm_address2 from local_lib_extract_view where perm_address2 is not null)
END perm_address2
...
FROM local_lib_extract_view
但收到错误消息“ ORA-01427:
单行子查询返回多个行。” SQL是否具有处理这种情况的能力?
答案 0 :(得分:1)
该错误导致您的子查询返回ELSE
中的多行。
您不需要使用子查询。只需在perm_address2
中获得ELSE
列,则可以删除第二个WHEN null THEN null
,当perm_address2
为NULL
时将为NULL
,因此这毫无意义
SELECT
...
CASE perm_address2
WHEN ' ' THEN null
ELSE perm_address2
END perm_address2
...
FROM local_lib_extract_view