您好我在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:缺少右括号
答案 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
并不代表“出生日期”,而是用户生日周年纪念日,那么我会考虑更改此项并记录出生日期而不是生日。你总能计算出生日,但回到出生日期是不可能的。