create table a (a nvarchar2(3) default Null null);
解决方案 »
- 急,急,急,急,利用储存过程把test表和text2表中的testsum数据相加,条件是两个表的testName和testBraId要一致的时候才相加.
- 调用oracle存储过程碰到日期格式问题
- 大家好,我想问大家一个ORACLE9i中merge into 的问题
- 一个触发器使用游标的问题!
- 请问各位 oracle 高手一个问题:在 oracle 中,用什么方法从A表中把数据导入B表最好??
- 机器更名后,oracle9i无法启动
- ORACLE数据移值(ORACLE for LINUX V. TO ORACLE FOR w2k V.)
- 日期格式?
- 急,我oracle安装后一切正常,但我重启动后出现下列问题,求助!!
- 怎么启动ORACLE的实例、TSNlistrener服务??
- ?该怎么优化呢,在加与不加字段之间徘徊?
- 关于null的问题?
而且'',和null。这两个付职应该是完全不同的吧?
你把nvarchar2改为varchar2应该就没有问题了
的意思可是不一样得呀,楼上
楼主的写法
create table a (a nvarchar2(3) default '' null);
default 值就是等于NULL
第一个NULL是default 的值,就是默认为NULL
后面的NULL是表示字段可以为NULL,是字段的约束
数据结构是一个成型系统,以sqlserver为数据库做好的.(现在需要同时支持oracle)表结构多而复杂,以上脚本是批量转换过来的。如果我手工调整sql将是非常不现实的一个做法.
但经过测试,这种写法在9i完全通过,但8i中提示如上错误.
所以想请教大家,是否可以通过调整字符集的方式,解决这个问题?怎么做?
小妹先谢!
在ORACLE中''是NULL的意思
即使你在9I中执行
create table a (a nvarchar2(3) default '' null);
成功了也和和SQLSERVER中意思不一样了。
应为SQLSERVER中字段default 的值是空格,到ORACLE中变成默认NULL了。我们以前平台移转的策略是改成:
create table a (a nvarchar2(3) default ' ' null);
create table a (a nvarchar2(3) default null not null);这样的话我就知道了,以前我用SQL SERVER都是把后一个NULL写在DEFAULT的前面。所以一时间没看出是什么意思
感谢你的经验策略,再请教一下,如果''被解析为null,我认为这一句,前后矛盾就应该不成立啊?但是结果是成立的。为什么?
create table a(a varchar2 default '' not null);
create table a(a varchar2 default null not null);
两句都成立,为什么啊?我不明白,a字段我不让其为空,那么按说,他不能为null,如果是' '这倒是还能理解。
就这样理解吧,default null 表示在为对字段赋值情况下ORACLE作的默认赋值操作。
后面的not null 是字段的一个约束,在赋值的时候会做检查。
create table a(a varchar2 default null not null);
这样的句子其本身和create table a(a varchar2 not null);
是一样的等于没有默认值。(在没有给默认值的情况下ORACLE赋值就是NULL)
在INSERT的时候不对该字段赋非空值的话就会报错的。