DROP COLUMN ORA-12991 & ORA-12983

 Connected to Oracle Database 10g Enterprise Edition Release 10.2.0.4.0
Connected as reporttest

SQL> SELECT * FROM P1;

USERNAME                 USERCODE   VALIDSTATUS
-------------------              ------------------  -----------
ORACLE                         10000001      1


SQL>  SELECT I.TABLE_NAME, I.INDEX_NAME, I.COLUMN_NAME
  2     FROM USER_IND_COLUMNS I, USER_CONSTRAINTS C
  3    WHERE C.TABLE_NAME = 'P1'
  4      AND I.TABLE_NAME = C.TABLE_NAME
  5      AND C.CONSTRAINT_TYPE = 'P'
  6  ;

TABLE INDEX_NAME                     COLUMN_NAME
----- ------------------------------ --------------
P1    PK_P1                          USERCODE
P1    PK_P1                          VALIDSTATUS

VALIDSTATUS与USERCODE是P1表的复合主键。

 

--1.被删除的列不能是复合主键的

SQL> ALTER TABLE P1 DROP COLUMN VALIDSTATUS;

ALTER TABLE P1 DROP COLUMN VALIDSTATUS

ORA-12991: column is referenced in a multi-column constraint


SQL> ALTER TABLE P1 DROP COLUMN VALIDSTATUS  CASCADE;

ALTER TABLE P1 DROP COLUMN VALIDSTATUS  CASCADE

ORA-02000: missing CONSTRAINTS keyword


--如果想删除包含复合主键的列,要使用CASCADE  CONSTRAINTS,同时主键被删除。
SQL> ALTER TABLE P1 DROP COLUMN VALIDSTATUS  CASCADE  CONSTRAINTS;

Table altered

-- 2.与表中是否有记录无关,表中有记录也可以删除列
SQL> SELECT * FROM P1;

USERNAME                       USERCODE
------------------------------      ----------
ORACLE                            10000001

SQL> ALTER TABLE P1 DROP COLUMN USERCODE;

Table altered


--3.当表中只剩一个列时,这个列不能被删除
SQL> ALTER TABLE P1 DROP COLUMN USERNAME;
ALTER TABLE P1 DROP COLUMN USERNAME
ORA-12983: cannot drop all columns in a table

SQL>

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值