ORACLE 数据库中的NUMBER类型的字段为NULL时怎么处理?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ORACLE 数据库中的NUMBER类型的字段为NULL时怎么处理?相关的知识,希望对你有一定的参考价值。

public List<Map<String, Object>> findZxm(String lxsbh)
StringBuffer sql = new StringBuffer();
sql.append("select N_XMXZ, N_LXSBH from t_zxxm_lxs where N_LXSBH =");
sql.append("(select N_MAINXMBH From t_zxxm_lxs WHere N_LXSBH =");
sql.append(lxsbh);
sql.append(")");
List<Map<String, Object>> list = this.getJdbcTemplate().queryForList(
sql.toString());
return list;



当调用改方法时:findZxm(lxsbh).get(0).get("N_XMXZ").equals(BigDecimal.valueOf(Long.valueOf(5)))
如果N_XMXZ为null值时会报空指针异常,这块改怎么处理?

1、创建一张数据库测试表,用于演示null空值的查询。

2、往测试表中插入测试记录,包含一个NULL、空字符串、非空字符串值。

3、查询测试表中的所有数据,select * from tblNullData。

4、在oracle数据库中,null与任何字段相比都会返回false,为此,oracle提供了一个is null词组判断null。从运行结果可以看出,空字符串不是null select * from tblNullData where ColName is null。

5、在oracle数据库中,想要查询非null的值,就需要使用is not null词组判断了。从运行结果可以看出,空字符串的记录行查询出来了select * from tblNullData where ColName is not null。

参考技术A 定义一个为null的情况接收的值,或者说数据库不可能存的值如 -1
sql.append("select N_XMXZ, N_LXSBH from t_zxxm_lxs where N_LXSBH =");

改为:
sql.append("select nvl(N_XMXZ,-1) N_XMXZ, N_LXSBH from t_zxxm_lxs where N_LXSBH =");

前台取出如何是-1的说明数据库里面为空,自己根据业务处理吧本回答被提问者和网友采纳
参考技术B select nvl(N_XMXZ,0), N_LXSBH from ** 自己在网上找找nvl的用法 参考技术C nvl(N_XMXZ,0)

使用 UNION 时的 Oracle 类型

【中文标题】使用 UNION 时的 Oracle 类型【英文标题】:Oracle Types when using UNION 【发布时间】:2013-04-10 12:37:25 【问题描述】:

我目前正在从同一架构中的 2 个 oracle 表中选择数据。 这里的问题与类型有关。我的查询如下:

问题是 oracle 告诉我“ORA-01790:表达式必须具有与相应表达式相同的数据类型” 并指向字段 EFF 年份。

eff_year 字段在数据库中的类型为 number(4)

report_date 字段是数据库中的日期类型

如何将 report_date 转换为数字?

我尝试过 TO_NUMBER(report_date) 但这给了我一个错误 ORA-01722: invalid number

SELECT 'Texture' MEASURE,
eff_year
FROM condition 
WHERE linear_id='004'
GROUP BY eff_year
UNION
SELECT 'Cracking' MEASURE,
TO_CHAR(report_date, 'YYYY') eff_year
FROM visual 
WHERE linear_id='004'
GROUP BY report_date

【问题讨论】:

【参考方案1】:
to_number(TO_CHAR(report_date, 'YYYY')) eff_year

【讨论】:

行得通 - 谢谢!我只能在 8 分钟内标记为正确 :)【参考方案2】:

我会将它们转换为日期(to_date(eff_year,'YYYY') 并使用普通的 report_date),但使用您的想法:

SELECT 'Texture' MEASURE,
eff_year
FROM condition 
WHERE linear_id='004'
GROUP BY eff_year

UNION ALL

SELECT 'Cracking' MEASURE,
to_number(TO_CHAR(report_date, 'YYYY')) eff_year
FROM visual 
WHERE linear_id='004'
GROUP BY TO_CHAR(report_date, 'YYYY')

【讨论】:

以上是关于ORACLE 数据库中的NUMBER类型的字段为NULL时怎么处理?的主要内容,如果未能解决你的问题,请参考以下文章

Oracle数据库age number(5) 是啥意思,名字的最大长度为5个字节?还是别的啥意思。

对于Oracle中Number类型的字段映射成Java中的具体类型的问题

在oracle中number类型的字段长度是啥意思

怎么更新oracle中的number类型字段

Oracle数据库中number类型在java中的使用

oracle字段类型NUMBER(38,3),括号中两个数字分别表示啥?