我正在嘗試執行以下查詢:
BEGIN
FOR i in (SELECT CONSTRAINT_NAME, TABLE_NAME FROM user_constraints WHERE TABLE_NAME = 'DATA_MAPP') LOOP
EXECUTE IMMEDIATE 'alter table '||i.table_name||' disable constraint '||i.constraint_name||'';
END LOOP;
END;
ALTER TABLE MAPP_SOA.DATA_MAPP ADD (DATA_MAPP_ID_RESERVA NUMBER(10));
UPDATE MAPP_SOA.DATA_MAPP SET DATA_MAPP_ID_RESERVA = DATA_MAPP_ID;
UPDATE MAPP_SOA.DATA_MAPP SET DATA_MAPP_ID = NULL;
ALTER TABLE MAPP_SOA.DATA_MAPP MODIFY DATA_MAPP_ID VARCHAR(30 CHAR);
UPDATE MAPP_SOA.DATA_MAPP SET DATA_MAPP_ID = DATA_MAPP_ID_RESERVA;
ALTER TABLE MAPP_SOA.DATA_MAPP DROP COLUMN DATA_MAPP_ID_RESERVA;
BEGIN
FOR i in (SELECT CONSTRAINT_NAME, TABLE_NAME FROM user_constraints WHERE TABLE_NAME = 'DATA_MAPP') LOOP
EXECUTE IMMEDIATE 'alter table '||i.table_name||' enable constraint '||i.constraint_name||'';
END LOOP;
END;
更改列 DATA_MAPP_ID 的型別以保持列順序。但它只有在 3 個塊中執行時才有效。當我嘗試執行整個腳本時,出現以下錯誤:
ORA-06550: linha 7, coluna 1: PLS-00103: Encontrado o símbolo "ALTER" 06550. 00000 - "line %s, column %s:\n%s" *原因:通常是 PL/SQL 編譯錯誤。*行動:
如何“修復”它以運行整個腳本?
uj5u.com熱心網友回復:
用斜杠結束 PL/SQL 塊 /
....
END;
/
uj5u.com熱心網友回復:
我首先想說這是不好的做法。表旨在保持相當靜態,如果有一個欄位有時需要有時不需要,您只需將其設定為可為空。或者在您的情況下,不要暫時禁用約束,因為它們不會被繞過。
它不起作用:(我收到錯誤“表或視圖不存在”
對上述問題的回應:該錯誤幾乎是不言自明的。表或視圖不存在。檢查錯別字。
由于您沒有為表提供 DDL,我將不得不放棄假設,并假設這應該可以解決您的問題(將整個內容包裝在一個匿名塊中,并在 ALTER TABLE 部分添加了一個匿名塊):
BEGIN
BEGIN
FOR i in (SELECT CONSTRAINT_NAME, TABLE_NAME FROM user_constraints WHERE TABLE_NAME = 'DATA_MAPP') LOOP
EXECUTE IMMEDIATE 'alter table '||i.table_name||' disable constraint '||i.constraint_name||'';
END LOOP;
END;
BEGIN
ALTER TABLE MAPP_SOA.DATA_MAPP ADD (DATA_MAPP_ID_RESERVA NUMBER(10));
UPDATE MAPP_SOA.DATA_MAPP SET DATA_MAPP_ID_RESERVA = DATA_MAPP_ID;
UPDATE MAPP_SOA.DATA_MAPP SET DATA_MAPP_ID = NULL;
ALTER TABLE MAPP_SOA.DATA_MAPP MODIFY DATA_MAPP_ID VARCHAR(30 CHAR);
UPDATE MAPP_SOA.DATA_MAPP SET DATA_MAPP_ID = DATA_MAPP_ID_RESERVA;
ALTER TABLE MAPP_SOA.DATA_MAPP DROP COLUMN DATA_MAPP_ID_RESERVA;
END;
BEGIN
FOR i in (SELECT CONSTRAINT_NAME, TABLE_NAME FROM user_constraints WHERE TABLE_NAME = 'DATA_MAPP') LOOP
EXECUTE IMMEDIATE 'alter table '||i.table_name||' enable constraint '||i.constraint_name||'';
END LOOP;
END;
END;
/
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/340640.html
