Oracle 删除和重新插入前需要保存数据
我必须改变现有的表格如下Oracle 删除和重新插入前需要保存数据,oracle,constraints,primary-key,Oracle,Constraints,Primary Key,我必须改变现有的表格如下 删除现有主键 添加新的主键 在这方面,我必须在创建新的主键之前删除所有现有数据。然后我需要重新插入数据。该表存在于多个模式中,我需要一个查询或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 PRIM
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
我不认为有任何方法可以从一个drop语句中删除多个模式中的表或对象。您可以使用下面提到的PL/SQL,但是在使用它时要小心,可能的话可以使用include WHERE子句
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错误,我们在其上创建主要约束的字段上存在一个空记录,因此请删除此字段中每个记录的空值,它也应该是唯一的。为什么需要删除数据?您的主键有外键引用吗?到目前为止您尝试了什么?当添加主键约束时,没有执行提到“ORA-01449:列包含空值;不能更改为非空”的语句。您必须用更新填充新的PID列,然后才能使其成为PK。不过,您还没有说明要如何生成它——可能不是从序列生成的,因为它是一个字符串列。您也需要使用delete/insert来实现这一点,但更新是一种更为明显的方法。您需要做的第一件事是决定如何将这些空值转换为实际值。即使您设法将数据复制到其他地方并将其删除。。。插入带有空值和该列PK的数据时会出现错误