如何从oracle数据库中删除基于列的约束?

如何从oracle数据库中删除基于列的约束?,oracle,constraints,Oracle,Constraints,是否有方法删除基于列名称的约束(唯一索引) 我想做的是删除columna name为name,name_type的约束 ALTER TABLE MY_TABLE DROP CONSTRAINT NAME_OF_CONSTRAINT 我没有名字,所以我想这样做 ALTER TABLE MY_TABLE DROP CONSTRAINT**,其中COLUMN=col1和COLUMN=col2** 对约束执行类似操作的任何语法 执行从用户列或所有列中选择*。这将为所有者、表和列组合提供约束名称 在为列名

是否有方法删除基于列名称的约束(唯一索引)

我想做的是删除columna name为name,name_type的约束

ALTER TABLE MY_TABLE DROP CONSTRAINT NAME_OF_CONSTRAINT

我没有名字,所以我想这样做

ALTER TABLE MY_TABLE DROP CONSTRAINT**,其中COLUMN=col1和COLUMN=col2**

对约束执行类似操作的任何语法

  • 执行
    从用户列
    所有列
    中选择*。这将为所有者、表和列组合提供约束名称
  • 在为列名返回的多行中,根据需要在
    ALTER表中使用约束名称。。。删除约束…
    语法
  • 如果您完全确定可以删除循环中的所有行,请使用动态sql对它们执行此操作

  • 这将为您提供一个额外的保护层,这样您就不会意外地删除所需的约束。

    我认为一条语句不可能做到这一点,但事实证明是这样的,如图所示:

    一个完整的例子: ALTER TABLE MY_TABLE ADD UNIQUE(col1、col2)

    另一种方法是查询
    USER\u约束
    USER\u CONS\u列
    视图,找到匹配的约束名称(可能是系统生成的或您已经知道的),然后使用该名称。如果需要作为脚本执行此操作,则可以在PL/SQL块中进行查询,并将找到的约束名称插入动态
    ALTER TABLE
    语句中

    ALTER TABLE MY_TABLE DROP UNIQUE(col1, col2);
    
    Table my_table altered.
    
    SELECT CONSTRAINT_NAME, INDEX_NAME
    FROM USER_CONSTRAINTS
    WHERE TABLE_NAME = 'MY_TABLE';
    
    CONSTRAINT_NAME                INDEX_NAME                    
    ------------------------------ ------------------------------
    SYS_C0092455                   SYS_C0092455                   
    
    ALTER TABLE MY_TABLE DROP UNIQUE(col1, col2);
    
    Table my_table altered.
    
    SELECT CONSTRAINT_NAME, INDEX_NAME
    FROM USER_CONSTRAINTS
    WHERE TABLE_NAME = 'MY_TABLE';
    
    no rows selected