oracle数据库 设置字段默认值无效

1、首先是在powerDesigner15.1中由物理模型生成sql脚本,

2、在plsql中导入脚本,生成数据表。然后在所在的工程页面填写一些数据进去,发现设置了默认值得字段有些为空,有些有默认值。不知道为什么,在设置默认值得时候,需要将字段设为可为空吗?就我的情况来说,好像有些不可为空的字段也可以出现默认值!

默认值,    和  是否可以为空,   是2个概念啊.



默认值, 就是你插入数据的时候,  如果不指定,  那么 数据库就  使用默认值,   来填写那一列.


为空, 就是那一列,  你不能指定为 NULL



CREATE TABLE temp (
  ID  INT,
  VAL1   INT  DEFAULT  100  NOT  NULL ,
  VAL2   INT  DEFAULT 200
);


INSERT INTO temp (id) VALUES (1);
INSERT INTO temp (id, val1)  VALUES(2, 101);
INSERT INTO temp (id, val2)  VALUES(3, 102);


SQL> SELECT * FROM temp;

        ID       VAL1       VAL2
---------- ---------- ----------
         1        100        200
         2        101        200
         3        100        102

SQL> INSERT INTO temp (id, val1)  VALUES(4, NULL);
INSERT INTO temp (id, val1)  VALUES(4, NULL)
                                       *
ERROR 位于第 1 行:
ORA-01400: 无法将 NULL 插入 ("TEST"."TEMP"."VAL1")

追问

嗯,你说的是对的,但是为什么我数据库中设置了default的字段会没有值呢,而有的又有值?我没往里面插值!!能跟我说下吗?

追答

上面的例子代码, 不是写了么?

你是怎么执行插入数据的。
如果某一列, 有 默认值。 你 插入的时候, 没有指定那一列, 那就自动 用默认值了。

但是如果你执行语句的时候, 指定了那一列, 是空白的。 那么就用你指定的数据, 不使用默认值了。

下面这种, 就是自己指定为 NULL 数据的了。
虽然 val1 上面有默认值, 但是你 手动指定为 NULL 了, 那么数据库就用你指定的, 不使用默认值了。
所以最后就会报错了。

INSERT INTO temp (id, val1) VALUES(4, NULL);

温馨提示:内容为网友见解,仅供参考
无其他回答

oracle数据库 设置字段默认值无效
默认值, 就是你插入数据的时候, 如果不指定, 那么 数据库就 使用默认值, 来填写那一列.为空, 就是那一列, 你不能指定为 NULL CREATE TABLE temp ( ID INT, VAL1 INT DEFAULT 100 NOT NULL , VAL2 INT DEFAULT 200);INSERT INTO temp (id) VALUES (1);IN...

oracle数据库的一个表中怎么设置字段的默认值
alter table 表名 modify 字段名 default 默认值;如test表中设置age字段为30,可用如下语句:alter table test modify age default 30;

如何给Oracle的数据添加默认值
2、第二步,执行完上面的操作之后,展开要操作的数据库下的所有表,见下图,转到下面的步骤。3、第三步,执行完上面的操作之后,右键单击要操作的表,然后选择[改变表]选项,见下图,转到下面的步骤。4、第四步,执行完上面的操作之后,在要修改的字段的[默认]位置内单击,然后输入默认值,见下图,...

oracle数据库的一个表中,怎么设置字段的默认值
alter table tablename modify yourfield number default 1;--此处为表tablename的yourfield(number类型) 添加了默认值约束1

ORACLE数据库设置date类型默认值后为什么还要手动添加?是不是我写错...
表字段设置date类型默认值,不需要手工添加,提示没有足够的值,是SQL本身的语法问题,insert语法要求如果不加列名,值的个数必须与表字段个数一致。你的这种情况下,必须指定字段名。

oracle数据库中,创建表,创建字段的时候后面跟着的这些属性是什么意思...
NUMBER(8,2) 表示字段的数据类型 ,有效位数是8,精确到小数点后两位 default 0 表示默认值为0

如何把数据库中NULL值设置为0
1、如果还没有导入数据,通用的做法是将表的这个字段设置默认值为0,所以当新增的时候如果该字段没有给值就会默认0这个值 2、如果已经导入数据,则可以使用修改语句修改update 表名 set 表字段='0' where ... --这条是将表中某个字段符合where条件的值设置为0 3、针对第一点 a、oracle 的修改...

有关Oracle存储过程的相关问题
select sum(vcount) into fcount from X where bid= xxxxxx 如果X表中不存在bid= xxxxxx 的记录 则fcount=null(即使fcount定义时设置了默认值 例如 fcount number( ) = 依然无效 fcount还是会变成null) 这样以后使用fcount时就可能会出现问题 所以在这里我们最好先判断一下 if fcount is...

oracle数据库中怎样对多个表增加字段
直接通过PL\/SQL Devrloper加,界面操作,简单方便。

oracle数据库中的number数据类型疑问
不加默认值当然不会自动为0了。读取的时候值为NULL 定义时注明小数位例如 number(18,4) 4即为小数位。想要默认值是0可以在定义字段时候在后面加上default 0 例 create table test(id number(10,2)default 0,name varchar2(20));再执行insert into test(name) values('a');后 查询 ...

相似回答