0

我从其他数据库中存在的表为数据库生成插入/更新脚本。所以,我使用连接||来生成脚本。但就连接列不是数字数据类型而言,这很好。我做如下

当我使用

select 'column_x'|| case community_id when null then null else community_id end || 'column_z' from tab;

结果是column_xcolumn_z。但我希望 null 在结果中打印为 null 。所以,为此我使用如下

select 'column_x'|| case community_id when null then 'null' else community_id end || 'column_z' from tab;

然后我收到ORA-00932: inconsistent datatypes: expected CHAR got NUMBER错误。如何获得column_xnullcolumn_z的结果?有小费吗?任何内置函数来处理?

4

1 回答 1

2

由于community_id是一个数字,您需要使用to_char函数或CAST函数将其显式转换为字符串

CASE community_id
     WHEN NULL 
     THEN 'null'
     ELSE to_char( community_id )
 END

将是有效的,因为CASE语句的两个分支都返回相同类型的数据。当查询的一个分支返回一种数据类型(字符串)而另一个返回一个数字时,您会收到错误,因为 Oracle 不知道它是否需要进行隐式转换。

于 2013-04-25T20:05:15.773 回答