如何在不使用约束名称的情况下删除主键

时间:2017-06-03 04:07:44

标签: oracle oracle11g primary-key

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

如果没有定义约束,如何删除主键?

3 个答案:

答案 0 :(得分:5)

  

"如何删除PK,因为没有定义约束?"

实际上它的一切都像你希望的那样简单:

<controls:AdaptiveGridView Name="AllVideosGridView" 
                                           OneRowModeEnabled="True"
                                           MaxHeight="260"
                                           ScrollViewer.HorizontalScrollMode="Enabled"
                                           ScrollViewer.HorizontalScrollBarVisibility="Auto"
                                           ItemClick="AllVideosGridView_ItemClick"
                                           Style="{StaticResource MainGridView}"
    <...data template and other stuff...>
</controls.........>

答案 1 :(得分:0)

运行此命令以获取约束名称:

SELECT *
  FROM user_cons_columns
 WHERE table_name = Persons;

然后运行

ALTER TABLE Persons
DROP CONSTRAINT <pk constraint>;

答案 2 :(得分: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

Drop Constraint

 ALTER TABLE PERSONS
 DROP CONSTRAINT SYS_C0012152;

注意:约束名SYS_C0012152未包含在单引号中。

PLSQL Block做同样的事情

 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;