当前位置: 首页 > 知识库问答 >
问题:

Oracle:将某些列定义为默认NULL的值(values_list)插入到表(column_list)中

国俊艾
2023-03-14

假设您有以下Oracle 11g表:

table sample(
  mykey int, --primary key
  myval varchar2(10 byte) not null,
  col1 varchar2(10 byte),
  col2 varchar2(10 byte) default NULL)
insert into sample(mykey, myval) values (1, 'test');
mykey    myval   col1    col2
1        test    null    null

此外,如果列col2没有定义“default null”,但仍然可以为null,则JDBC insert将工作并为col1和col2设置“null”。

为列指定“default null”是多余的还是完全错误的?如果Oracle允许我使用该默认值创建列,并允许我编写SQL代码以正确插入示例中的内容,那么我不认为这样做是错误的/非法的。

这是与Oracle DB(或任何数据库)有关吗?还是通过JDBC驱动程序插入的应用程序发出了错误的语句?

共有1个答案

袁博
2023-03-14

为列指定“default null”是多余的还是明显错误的?

是的,这是多余的。如果不指定默认值,则隐含default null

毕竟,这是唯一明智的行为:如果不提供值,唯一可能的选择就是在该列中存储“unknown”。这正是null的意思:不知道是否有值。

insert into sample(mykey, myval, col1) values (1, 'test');

我没有试过,但可能是下面这样的东西也会导致这个错误:

PreparedStatement pstmt = connection.prepareStatement("insert into sample(mykey, myval, col1, col2) values (?,?,?,?)");
pstmt.setInt(1, 1),
pstmt.setString(2, 'test');

请注意,没有为第三列调用setxxx()

 类似资料:
  • 我在MySQL数据库中有一个表,其中包含一个默认值的列,在数据库端使用phpMyAdmin定义。当我使用HiberNate插入新行时,我得到这个错误: 通用域名格式。mysql。jdbc。例外。jdbc4。MySQLIntegrityConstraintViolationException:列“status”不能为null 我还需要做些什么来使用默认值吗? 实体

  • 问题内容: 我正在尝试使用多个插入(在一条语句中),并且我具有此表结构 我的查询: 由于[StudentID]列不接受NULL,因此该语句(我预期是)应该失败。问题是MySQL在第2行中插入了空字符串(’‘)…,并允许其余的继续。 问题答案: 问题: 或放 下到(然后重新启动)。

  • 我尝试使用liquibase使用liquibase“addDefaultValue”语法将我的列的默认值设置为null: 但是向myTable插入新行显示默认值仍然设置为“false”,就像以前一样。所以liquibase更改集不起作用。 如何设置列默认值为null与liquibase?

  • 列插入和更新默认值是指创建 默认值 对于一行中的特定列,INSERT或UPDATE语句正在对该行执行,如果 没有为该列的INSERT或UPDATE语句提供值 . 也就是说,如果一个表有一个名为“timestamp”的列,并且INSERT语句继续执行,但不包括该列的值,则INSERT default将创建一个新值,例如current time,用作要插入“timestamp”列中的值。如果声明 do

  • 问题内容: 我已经多次看到以下在create / alter DDL语句中定义列的语法: 问题是:由于指定了默认值,是否还需要指定该列不应该接受NULL?换句话说,DEFAULT是否不使NOT NULL变得多余? 问题答案: 是在insert / update语句中没有显式值的情况下将要插入的值。让我们假设,您的DDL没有约束: 然后你可以发表这些声明 另外,您还可以根据SQL-1992标准使用i

  • 问题内容: 我在MySQL中有一个表,其中有几列具有指定的默认值,但是当我尝试插入行时(未为这些默认列指定值),它抛出错误,提示我无法插入NULL值。 这是表格示例; 它抱怨TimeZoneId,当我填充TimeZoneId时,它抱怨CultureInforId。 我正在使用MySQL版本:5.1.43-community 这是我尝试插入的插入查询,是从NHibernate Profiler中获取