Vorgehen um ein Feld aus einer Oracle Tabelle zu entfernen |
|
---|---|
------------------------------------------------------- SQL-script to DROP field from an ORACLE table ------------------------------------------------------- Tablename: DEPT Colunname: DNAME (must be removed from table) 1). Copy table DEPT to DEPT_TMP without field DNAME ---------------------------------------------------- CREATE TABLE dept_tmp PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 STORAGE(INITIAL 10000 NEXT 10000 MINEXTENTS 1 MAXEXTENTS UNLIMITED PCTINCREASE 0 FREELISTS 1) TABLESPACE tab AS SELECT deptno, loc FROM dept; 2). Drop all constraints referencing orign table DEPT ----------------------------------------------------- ALTER TABLE emp DROP CONSTRAINT emp_foreign_key; ALTER TABLE dept DROP CONSTRAINT dept_primary_key; 3). Drop origin table DEPT -------------------------- DROP TABLE dept; 4). Rename table DEPT_TMP to new table DEPT ------------------------------------------- RENAME dept_tmp to dept; 5). Drop all all auomatically renamed constraints in new table DEPT ------------------------------------------------------------------- SPOOL drop_constraints.sql SELECT 'ALTER TABLE dept DROP CONSTRAINT '||constraint_name||';' FROM user_constraints WHERE UPPER(table_name) = 'DEPT'; SPOOL OFF; start drop_constraints.sql 6). Rebuild constraints on new table DEPT ----------------------------------------- ALTER TABLE dept MODIFY (deptno CONSTRAINT nn_dept_deptno NOT NULL); ALTER TABLE dept ADD CONSTRAINT dept_primary_key PRIMARY KEY (deptno) USING INDEX TABLESPACE idx STORAGE (INITIAL 500K NEXT 500K MINEXTENTS 1 MAXEXTENTS UNLIMITED PCTINCREASE 0 FREELISTS 2); 7). Rebuild Foreign Keys in all tables referencing table DEPT --------------------------------------------------------------- ALTER TABLE emp ADD (CONSTRAINT emp_foreign_key FOREIGN KEY (deptno) REFERENCES dept (deptno)); 8). Rebuild Indexes in all tables referencing table DEPT -------------------------------------------------------- CREATE INDEX emp_deptno_idx ON emp (deptno) TABLESPACE idx STORAGE (INITIAL 500K NEXT 500K MINEXTENTS 1 MAXEXTENTS UNLIMITED PCTINCREASE 0) PCTFREE 10; 9). Grant all privileges again ------------------------------ GRANT SELECT,INSERT,UPDATE,DELETE ON dept TO .....; |