2017-06-03 111 views

回答

3

“如何删除PK,因为没有定义的约束?”

其实它的每一个位那么简单,你可能希望:

SQL> create table t23 (id number primary key); 

Table created. 

SQL> select constraint_name, constraint_type 
    2 from user_constraints 
    3 where table_name = 'T23' 
    4/

CONSTRAINT_NAME    C 
------------------------------ - 
SYS_C0034419     P 

SQL> alter table t23 drop primary key; 

Table altered. 

SQL> select constraint_name, constraint_type 
    2 from user_constraints 
    3 where table_name = 'T23' 
    4/

no rows selected 

SQL> 
0

运行此得到约束名称:

SELECT * 
    FROM user_cons_columns 
WHERE table_name = Persons; 

然后运行

ALTER TABLE Persons 
DROP CONSTRAINT <pk constraint>; 
0

不要以为你能做到在1个SQL命令,不知道约束的名字,但你可以知道在这种情况下约束名称将由系统定义。一些以SYS....开头的东西。

或者,您可以使用PLSQL块来实现相同。

请参阅下面的例子以了解您的情况。

CREATE TABLE Persons (
ID int PRIMARY KEY, 
LastName varchar(255) NOT NULL, 
FirstName varchar(255), 
Age int 
); 

查找约束名

select CONSTRAINT_NAME 
From USER_CONSTRAINTS 
where table_name='PERSONS' 
AND CONSTRAINT_TYPE='P'; 

OUTPUT:= SYS_C0012152

跌落约束

ALTER TABLE PERSONS 
DROP CONSTRAINT SYS_C0012152; 

注:约束名SYS_C0012152不是单引号括起来。

PLSQL块做同样的

declare 
sql_stmt varchar2(255); 
cons_name varchar2(30); 
begin 
    select CONSTRAINT_NAME 
    into cons_name 
    From USER_CONSTRAINTS 
    where table_name='PERSONS' 
    AND CONSTRAINT_TYPE='P'; 

    sql_stmt:=' ALTER TABLE PERSONS 
    DROP CONSTRAINT '||cons_name; 

    dbms_output.put_line(sql_stmt); 
    execute immediate sql_stmt; 

end; 
+0

其实它可以在一个语句来完成。看到我的答案。 – APC