--学生表
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 '男'注释掉就可以顺利建表了?请问这是为什么?求高手指教灰常感谢(*^__^*) 

解决方案 »

  1.   

    你的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" ;
    可以参考一下
      

  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.   

     alter table stu
      modify (stusex char(2) default '男');
    添加默认约束
      

  5.   


    谢谢你的回答,我也刚参照2楼的办法像您说的那样子把default'男'放到了check的前面,果然可以了。。不知道这是为什么呢?我是用的pl/sql
      

  6.   


    谢谢你的回答,我也按照您的建议测试了,最后表结构如下:证明也可以的。。长见识了,,谢谢各位好心的朋友
    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