Create table stu(
stuId varchar2(30) primary key,
stuName varchar2(50) not null,
stuSex char(2) check(stuSex in('男','女')) default '男', --oracle中无默认属性?
stuAge Number(2) check(stuAge >1),
stuJg varchar2(30), --籍贯
stuDept varchar2(40)
);
创建表时,想设置学生性别的默认属性为男,但是如下所写,建表时提示缺少右括号,把default '男'注释掉就可以顺利建表了?请问这是为什么?求高手指教。。。灰常感谢(*^__^*) 。。。
10 个解决方案
#1
你的Default后面的默认值要放在括号里面,正确的写法应该是:
default('男')
default('男')
#2
不知道你是用的pl/sql还是sql developer,性别的字符长度最好设成3,我创建的时候设成2就提示我报错。
这是我生成的sql代码
CREATE TABLE "DSL"."EASYBUY_USER"
( "EU_USER_ID" VARCHAR2(10 BYTE) NOT NULL ENABLE,
"EU_USER_NAME" VARCHAR2(20 BYTE) NOT NULL ENABLE,
"EU_PASSWORD" VARCHAR2(16 BYTE) NOT NULL ENABLE,
"EU_SEX" VARCHAR2(3 BYTE) DEFAULT '男' NOT NULL ENABLE,
"EU_BIRTHDAY" DATE,
"EU_IDENTITY_CODY" VARCHAR2(18 BYTE),
"EU_MONEY" NUMBER(10,2) DEFAULT 0,
"EU_EMAIL" VARCHAR2(30 BYTE),
"EU_MOBILE" NUMBER(11,0),
"EU_ADDRESS" VARCHAR2(100 BYTE) NOT NULL ENABLE,
"EU_STATUS" NUMBER(2,0) DEFAULT 1 NOT NULL ENABLE,
CONSTRAINT "EU_STATUS" CHECK (eu_status>0 and eu_status<3) ENABLE,
CONSTRAINT "EU_USER_ID" PRIMARY KEY ("EU_USER_ID")
USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
TABLESPACE "YANGMENG_SPACE" ENABLE
) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
TABLESPACE "YANGMENG_SPACE" ;
可以参考一下
这是我生成的sql代码
CREATE TABLE "DSL"."EASYBUY_USER"
( "EU_USER_ID" VARCHAR2(10 BYTE) NOT NULL ENABLE,
"EU_USER_NAME" VARCHAR2(20 BYTE) NOT NULL ENABLE,
"EU_PASSWORD" VARCHAR2(16 BYTE) NOT NULL ENABLE,
"EU_SEX" VARCHAR2(3 BYTE) DEFAULT '男' NOT NULL ENABLE,
"EU_BIRTHDAY" DATE,
"EU_IDENTITY_CODY" VARCHAR2(18 BYTE),
"EU_MONEY" NUMBER(10,2) DEFAULT 0,
"EU_EMAIL" VARCHAR2(30 BYTE),
"EU_MOBILE" NUMBER(11,0),
"EU_ADDRESS" VARCHAR2(100 BYTE) NOT NULL ENABLE,
"EU_STATUS" NUMBER(2,0) DEFAULT 1 NOT NULL ENABLE,
CONSTRAINT "EU_STATUS" CHECK (eu_status>0 and eu_status<3) ENABLE,
CONSTRAINT "EU_USER_ID" PRIMARY KEY ("EU_USER_ID")
USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
TABLESPACE "YANGMENG_SPACE" ENABLE
) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
TABLESPACE "YANGMENG_SPACE" ;
可以参考一下
#3
你好,谢谢您的回答,我也想过这种情况,代码如下:可是pl/sql还是报错“缺少右括号”,您知道这其中的原因吗?
Create table stu(
stuId varchar2(30) primary key,
stuName varchar2(50) not null,
stuSex char(2) check(stuSex in('男','女')) default('男'), --oracle中无默认属性?
stuAge Number(2) check(stuAge >1),
stuJg varchar2(30), --籍贯
stuDept varchar2(40)
);
#4
你好,谢谢你的回复,我按照你的把性别的长度改为3了,还是不行,纠结了。。。
#5
default 在check之前就OK了
#6
alter table stu
modify (stusex char(2) default '男');
添加默认约束
modify (stusex char(2) default '男');
添加默认约束
#7
是建表后添加的一个默认约束
#8
谢谢你的回答,我也刚参照2楼的办法像您说的那样子把default'男'放到了check的前面,果然可以了。。不知道这是为什么呢?我是用的pl/sql
#9
这个是语法吧
#10
谢谢你的回答,我也按照您的建议测试了,最后表结构如下:证明也可以的。。长见识了,,谢谢各位好心的朋友。。。
SQL> desc stu;
Name Type Nullable Default Comments
------- ------------ -------- ------- --------
STUID VARCHAR2(30)
STUNAME VARCHAR2(50)
STUSEX CHAR(2) Y '男'
STUAGE NUMBER(2) Y
STUJG VARCHAR2(30) Y
STUDEPT VARCHAR2(40) Y
#1
你的Default后面的默认值要放在括号里面,正确的写法应该是:
default('男')
default('男')
#2
不知道你是用的pl/sql还是sql developer,性别的字符长度最好设成3,我创建的时候设成2就提示我报错。
这是我生成的sql代码
CREATE TABLE "DSL"."EASYBUY_USER"
( "EU_USER_ID" VARCHAR2(10 BYTE) NOT NULL ENABLE,
"EU_USER_NAME" VARCHAR2(20 BYTE) NOT NULL ENABLE,
"EU_PASSWORD" VARCHAR2(16 BYTE) NOT NULL ENABLE,
"EU_SEX" VARCHAR2(3 BYTE) DEFAULT '男' NOT NULL ENABLE,
"EU_BIRTHDAY" DATE,
"EU_IDENTITY_CODY" VARCHAR2(18 BYTE),
"EU_MONEY" NUMBER(10,2) DEFAULT 0,
"EU_EMAIL" VARCHAR2(30 BYTE),
"EU_MOBILE" NUMBER(11,0),
"EU_ADDRESS" VARCHAR2(100 BYTE) NOT NULL ENABLE,
"EU_STATUS" NUMBER(2,0) DEFAULT 1 NOT NULL ENABLE,
CONSTRAINT "EU_STATUS" CHECK (eu_status>0 and eu_status<3) ENABLE,
CONSTRAINT "EU_USER_ID" PRIMARY KEY ("EU_USER_ID")
USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
TABLESPACE "YANGMENG_SPACE" ENABLE
) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
TABLESPACE "YANGMENG_SPACE" ;
可以参考一下
这是我生成的sql代码
CREATE TABLE "DSL"."EASYBUY_USER"
( "EU_USER_ID" VARCHAR2(10 BYTE) NOT NULL ENABLE,
"EU_USER_NAME" VARCHAR2(20 BYTE) NOT NULL ENABLE,
"EU_PASSWORD" VARCHAR2(16 BYTE) NOT NULL ENABLE,
"EU_SEX" VARCHAR2(3 BYTE) DEFAULT '男' NOT NULL ENABLE,
"EU_BIRTHDAY" DATE,
"EU_IDENTITY_CODY" VARCHAR2(18 BYTE),
"EU_MONEY" NUMBER(10,2) DEFAULT 0,
"EU_EMAIL" VARCHAR2(30 BYTE),
"EU_MOBILE" NUMBER(11,0),
"EU_ADDRESS" VARCHAR2(100 BYTE) NOT NULL ENABLE,
"EU_STATUS" NUMBER(2,0) DEFAULT 1 NOT NULL ENABLE,
CONSTRAINT "EU_STATUS" CHECK (eu_status>0 and eu_status<3) ENABLE,
CONSTRAINT "EU_USER_ID" PRIMARY KEY ("EU_USER_ID")
USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
TABLESPACE "YANGMENG_SPACE" ENABLE
) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
TABLESPACE "YANGMENG_SPACE" ;
可以参考一下
#3
你好,谢谢您的回答,我也想过这种情况,代码如下:可是pl/sql还是报错“缺少右括号”,您知道这其中的原因吗?
Create table stu(
stuId varchar2(30) primary key,
stuName varchar2(50) not null,
stuSex char(2) check(stuSex in('男','女')) default('男'), --oracle中无默认属性?
stuAge Number(2) check(stuAge >1),
stuJg varchar2(30), --籍贯
stuDept varchar2(40)
);
#4
你好,谢谢你的回复,我按照你的把性别的长度改为3了,还是不行,纠结了。。。
#5
default 在check之前就OK了
#6
alter table stu
modify (stusex char(2) default '男');
添加默认约束
modify (stusex char(2) default '男');
添加默认约束
#7
是建表后添加的一个默认约束
#8
谢谢你的回答,我也刚参照2楼的办法像您说的那样子把default'男'放到了check的前面,果然可以了。。不知道这是为什么呢?我是用的pl/sql
#9
这个是语法吧
#10
谢谢你的回答,我也按照您的建议测试了,最后表结构如下:证明也可以的。。长见识了,,谢谢各位好心的朋友。。。
SQL> desc stu;
Name Type Nullable Default Comments
------- ------------ -------- ------- --------
STUID VARCHAR2(30)
STUNAME VARCHAR2(50)
STUSEX CHAR(2) Y '男'
STUAGE NUMBER(2) Y
STUJG VARCHAR2(30) Y
STUDEPT VARCHAR2(40) Y