列的默认值Oracle 9i

时间:2012-03-31 12:30:07

标签: oracle oracle9i

您好我在sql plus

中运行以下查询
CREATE TABLE yii_profiles (
  user_id NUMBER(11) NOT NULL,
  lastname varchar(50)  NOT NULL DEFAULT '',
  firstname varchar(50) NOT NULL DEFAULT '',
  birthday date NOT NULL DEFAULT '0000-00-00',
  PRIMARY KEY (user_id)
);

我收到了以下错误。你能告诉我哪里出错了。我尝试了各种方法但没有成功。

第3行的错误: ORA-00907:缺少右括号

1 个答案:

答案 0 :(得分:2)

创建约束时,应明确说明关键字constraint和该约束的名称,以便在数据库中为此对象获取正确的名称。

Oracle treats the empty string as null因此NOT NULL DEFAULT ''无效。我已将其删除,并将varchar更改为varchar2 future behaviour of varchar is not guaranteed

CREATE TABLE yii_profiles (
  user_id NUMBER(11) NOT NULL,
  lastname varchar2(50)  NOT NULL,
  firstname varchar2(50) NOT NULL,
  birthday date NOT NULL,
  constraint pk_yii_profiles PRIMARY KEY (user_id)
);

以同样的方式在非空列上设置默认值不是必然一个好主意。如果你想捕获你的用户名字,姓氏和生日,你想要将它们默认为某些东西吗?

必须包含名字 ,在这种情况下,为此列设置默认值只会创建不正确的数据,或者数据不需要和列应该可以为空。我个人也会删除birthday上的默认值,原因相同。此外,由于a_horse_with_no_name指出0不能作为Oracle中的日期。

如果birthday并不代表“出生日期”,而是用户生日周年纪念日,那么我会考虑更改此项并记录出生日期而不是生日。你总能计算出生日,但回到出生日期是不可能的。