需要在删除和重新插入之前保存数据

时间:2015-07-09 14:40:12

标签: oracle constraints primary-key

我必须按如下方式更改现有表格。

  1. 删除现有的PRIMARY KEY
  2. 添加新的PRIMARY KEY
  3. 在这方面,我必须在创建新主键之前删除所有现有数据。然后我需要重新插入数据。该表存在于多个模式中,我需要一个查询或PL / SQL块来执行此功能。

    我使用了以下查询:

    ALTER TABLE SCHEMA1.A DROP CONSTRAINT PK_A;
    
    ALTER TABLE SCHEMA1.A ADD PID VARCHAR2(40 CHAR);
    
    ALTER TABLE SCHEMA1.A ADD (CONSTRAINT PK_A PRIMARY KEY (PID)); 
    

    使用

    进行上一次查询失败
    ORA-01449: column contains NULL values; cannot alter to NOT NULL
    

1 个答案:

答案 0 :(得分:0)

我认为没有办法从单个DROP语句中删除多个模式中的表或任何对象。您可以使用下面提到的PL / SQL,但要小心使用它,并且可能包括WHERE CLAUSE。

SET serveroutput ON;  

DECLARE  

            CURSOR c    IS   

    SELECT username FROM dba_users;

  table_check_cnt NUMBER;


  dropSQL         VARCHAR2(300);

BEGIN  
  dbms_output.put_line('Execution of block starts');   
  FOR c1 IN c   
  LOOP   
    SELECT COUNT(*)   
    INTO table_check_cnt   
    FROM dba_tables   
    WHERE owner       =c1.username   
    AND table_name    ='FOO';    
    IF table_check_cnt=1 THEN   
      dbms_output.put_line('count is '||table_check_cnt);   
      dropSQL := 'drop table '|| c1.username || '.FOO';   
      EXECUTE IMMEDIATE dropsql;   
    END IF;   
  END LOOP;   
END;   

对于ORA-01449错误,在我们创建主要约束的字段上存在空记录,因此删除此字段中每条记录的空值,它也应该是唯一的。