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的情况接收的值,或者说数据库不可能存的值如 -1sql.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个字节?还是别的啥意思。