我會給你一個方法,可能會導致你的解決方案。此代碼是真的不測試,因爲現在我沒有時間去做,但我希望它可以幫助你......
1)創建一個遊標這樣的:
declare v_table_name varchar2(30) := 'HIST';
cursor cur is select column_name, data_type
from all_tab_columns
where table_name = v_table_name
and column_name != 'COL1'
order by column_id;
有你可以得到表格的所有當前列,當然,將考慮你所做的任何變更表。
2)您必須獲取該遊標並創建一個動態插入語句。事情是這樣的:
declare v_column_list varchar2(500);
declare v_values_list varchar2(500);
for i in cur loop
v_column_list := v_column_list||','||i.column_name;
v_values_list := v_values_list||', :new.'||i.column_name;
end loop;
3)創建動態插入語句並執行:
declare csql varchar2(500);
csql := 'INSERT INTO '||v_table_name||' ('||v_column_list||') VALUES ('||v_values_list||')';
EXECUTE IMMEDIATE (csql);
希望這有助於...
否; [相關但不完全重複的問題](http://stackoverflow.com/q/9133120/266304)。您可以在每次更改後從表格定義中生成觸發器創建腳本,但仍然必須以某種方式重新創建,並且新列明確列出。 –