遇到一個需求:在已經建好的數據庫中,為每一個數據表都添加相同的3個字段。
分析:數據庫中的數據表較多,一一手動修改耗時低效,是否可以用程序遍歷每一張表,然后為遍歷到的當前表添加字段?
查詢當前用戶的所有表定義和為某張表添加字段比較容易實現的,SQL中游標可以將這兩者組織起來,因此編寫以下程序實現功能:
DECLARE V_SQL VARCHAR2(2000); V_TABLE_NAME VARCHAR2(30); CURSOR C1 IS SELECT TABLE_NAME FROM USER_TABLES; --查詢當前用戶下的所有表 BEGIN OPEN C1; LOOP --提取一行數據到c1 FETCH C1 INTO V_TABLE_NAME; --判讀是否提取到值,沒取到值就退出 --取到值c_job%notfound 是false --取不到值c_job%notfound 是true EXIT WHEN C1%NOTFOUND; V_SQL := 'alter table ' || V_TABLE_NAME || ' add BATCHDATE NUMBER(8,0)'; EXECUTE IMMEDIATE V_SQL; V_SQL := 'alter table ' || V_TABLE_NAME || ' add SOURCE_ID NUMBER(8,0)'; EXECUTE IMMEDIATE V_SQL; V_SQL := 'alter table ' || V_TABLE_NAME || ' add load_date date'; EXECUTE IMMEDIATE V_SQL; END LOOP; --關閉游標 CLOSE C1; END;