Oracle中null值和空字符串的坑及解决

 更新时间:2024年08月26日 09:53:00   作者:草莓田田圈~  
这篇文章主要介绍了Oracle中null值和空字符串的坑及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

思考

在学习oracle数据库的过程中,发现当对字段进行约束,默认空字符串时,出现报错

--创建employees表
CREATE TABLE employees (
  id NUMBER,
  name VARCHAR2(100)  
);
--对表新增email列,添加约束默认空字符串并且非空
ALTER TABLE employees ADD email VARCHAR2(100) DEFAULT ''  NOT NULL;

以上操作的预期是向employees表中添加数据,email不添加数据的时候默认是空字符串,但实际上无法添加成功。

在MySQL数据库中

--创建表employees
CREATE TABLE employees(
id int,   
name VARCHAR(100)   
);
--添加字段email,并添加约束
ALTER TABLE employees ADD email VARCHAR(100) DEFAULT ''  NOT NULL;
  • 向表中添加数据
--emial字段没有添加,默认为空字符串,不是null
INSERT INTO employees (id,name) VALUES (1,'TOM');
INSERT INTO employees  VALUES (2,'Carl','');
--email添加一个值
INSERT INTO employees  VALUES (3,'Jhon','123@qq.com');
--查询结果
mysql> SELECT  *  FROM  employees;
+------+------+------------+
| id   | name | email      |
+------+------+------------+
|    1 | TOM  |            |
|    2 | Carl |            |
|    3 | Jhon | 123@qq.com |
+------+------+------------+
3 rows in set (0.00 sec)

在MySQL数据库中符合预期,email字段有数值时,是实际的数值,相反是默认的值。

  • 修改约束
ALTER TABLE employees modify email VARCHAR(100);
  • 添加数据
INSERT INTO employees (id,name) VALUES (1,'TOM');
INSERT INTO employees  VALUES (2,'Carl','');
  • 查看结果
mysql> SELECT  *  FROM  employees;
+------+------+-------+
| id   | name | email |
+------+------+-------+
|    1 | TOM  | NULL  |
|    2 | Carl |       |
+------+------+-------+
2 rows in set (0.00 sec)

MySQL中空字符串就是空字符串,空值就是NULL

在Oracle数据库中

--创建表
CREATE TABLE employees (
id NUMBER,
name VARCHAR2(100)  
);
--新增email字段,添加约束
ALTER TABLE employees ADD email VARCHAR2(100) DEFAULT ''  NOT NULL;
  • 向表中添加数据报错
INSERT INTO employees (id,name) VALUES (1,'TOM');
INSERT INTO employees  VALUES (2,'Carl','');

  • 修改约束
--修改email的约束,改成可以添加空值
ALTER TABLE employees MODIFY email varchar2(100) ;
--插入数据
INSERT INTO employees (id,name,email) VALUES (1,'TOM','');  --添加空字符串
INSERT INTO employees  VALUES (2,'Carl',null);

查询结果,结果都是null

原因是因为在Oracle中,将长度为零的字符值视为NULL

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Oracle利用errorstack追踪tomcat报错ORA-00903 无效表名的问题

    Oracle利用errorstack追踪tomcat报错ORA-00903 无效表名的问题

    这篇文章主要介绍了Oracle利用errorstack追踪tomcat报错ORA-00903 无效表名,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-06-06
  • Oracle基础:通过sqlplus执行sql语句后的结果进行判断

    Oracle基础:通过sqlplus执行sql语句后的结果进行判断

    今天小编就为大家分享一篇关于Oracle基础:通过sqlplus执行sql语句后的结果进行判断,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-12-12
  • Oracle中正则表达式的使用实例教程

    Oracle中正则表达式的使用实例教程

    大家对正则表达式应该都不会陌生,从linux下的命令到Java等编程语言,正则表达式无处不在,虽然我们实际使用不一定太多,但是当我们要处理字符串时,它确实是一个强大的工具。这篇文章主要给大家介绍了关于Oracle中正则表达式使用的相关资料,需要的朋友可以参考下。
    2017-10-10
  • oracle 创建表空间详细介绍

    oracle 创建表空间详细介绍

    分为四步:详细介绍如何创建表空间
    2012-11-11
  • ORACLE应用经验(2)

    ORACLE应用经验(2)

    ORACLE应用经验(2)...
    2007-03-03
  • Oracle使用range分区并根据时间列自动创建分区

    Oracle使用range分区并根据时间列自动创建分区

    这篇文章主要介绍了Oracle使用range分区并根据时间列自动创建分区,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-04-04
  • 浅谈oracle rac和分布式数据库的区别

    浅谈oracle rac和分布式数据库的区别

    这篇文章主要介绍了oracle rac和分布式数据库的区别的相关内容,小编觉得挺不错的,这里给大家分享下,需要的朋友可以参考。
    2017-10-10
  • oracle常用数据类型说明

    oracle常用数据类型说明

    这篇文章主要介绍了oracle常用数据类型说明,需要的朋友可以参考下
    2014-02-02
  • Oracle中sequence(序列)使用方法详解

    Oracle中sequence(序列)使用方法详解

    在oracle中sequence就是序号,每次取的时候它会自动增加,下面这篇文章主要给大家介绍了关于Oracle中sequence(序列)使用方法的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-03-03
  • Navicat设置Oracle数据库主键自增的方法步骤

    Navicat设置Oracle数据库主键自增的方法步骤

    今天工作的时候,用到了oracle数据库建表,发现navicat中对于oracle的支持没有那个主键自增的按钮,下面这篇文章主要给大家介绍了关于Navicat设置Oracle数据库主键自增的方法步骤,需要的朋友可以参考下
    2023-03-03

最新评论