我必须按如下方式更改现有表格。
在这方面,我必须在创建新主键之前删除所有现有数据。然后我需要重新插入数据。该表存在于多个模式中,我需要一个查询或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
答案 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错误,在我们创建主要约束的字段上存在空记录,因此删除此字段中每条记录的空值,它也应该是唯一的。