【发布时间】:2014-09-05 08:45:32
【问题描述】:
假设您有这个 Oracle 11g 表:
table sample(
mykey int, --primary key
myval varchar2(10 byte) not null,
col1 varchar2(10 byte),
col2 varchar2(10 byte) default NULL)
如果你从 sqldeveloper 执行这个语句,例如:
insert into sample(mykey, myval) values (1, 'test');
你得到
mykey myval col1 col2
1 test null null
请注意,两个可空列是否指定“默认空值”并没有什么区别,您仍然会为您输入“空值”作为值。
现在,为什么来自 JDBC 驱动程序的完全相同的插入会失败并出现“没有足够的值”错误?
此外,如果定义列 col2 时没有“默认 null”,但仍然可以为空,则 JDBC 插入工作并为 col1 和 col2 设置“null”。
为一列指定“默认空值”是多余的还是完全错误的?如果 Oracle 允许我使用该默认值创建列并允许我编写正确插入示例中的 SQL 代码,我认为这样做没有错误/非法。
这是否与 Oracle 数据库(或与此相关的任何数据库)有关,或者通过 JDBC 驱动程序插入的应用程序是否发出了错误的语句?
提前致谢
【问题讨论】:
-
你能显示你的jdbc代码吗
-
@Joram - 抱歉,如果我拥有它,我会发布它。我正在使用 TIBCO BusinessWorks,所以我面前没有实际的 Java 代码,但最终结果是 JDBC 插入。我只是想知道指定“默认 null”是否错误/是否会导致 Oracle 出现问题,如果问题出在其他地方