嶺澳核電站採 Oracle 7.3 + Developer/Designer 2000 架構,作者沉澱多年實戰技巧,涵蓋 SQL*Plus 高階用法、Developer 2000 表單/報表開發祕籍、資料庫管理核心操作,供同行參考。
-- 查找 DRAWING、DSNO 重複
SELECT DRAWING, DSNO FROM EM5_PIPE_PREFAB
WHERE ROWID != (SELECT MAX(ROWID) FROM EM5_PIPE_PREFAB D
WHERE EM5_PIPE_PREFAB.DRAWING=D.DRAWING AND EM5_PIPE_PREFAB.DSNO=D.DSNO);
-- 刪除重複(保留 ROWID 最大者)
DELETE FROM EM5_PIPE_PREFAB
WHERE ROWID != (SELECT MAX(ROWID) FROM EM5_PIPE_PREFAB D
WHERE EM5_PIPE_PREFAB.DRAWING=D.DRAWING AND EM5_PIPE_PREFAB.DSNO=D.DSNO);
資料庫遷移重建後視圖失效,利用 PL/SQL 動態生成腳本:
SPOOL ON.SQL
SELECT 'ALTER VIEW '||TNAME||' COMPILE;' FROM TAB;
SPOOL OFF
@ON.SQL
-- 授權與同義詞同理
SELECT 'GRANT SELECT ON '||TNAME||' TO USERNAME;' FROM TAB;
SELECT 'CREATE SYNONYM '||TNAME||' FOR USERNAME.'||TNAME||';' FROM TAB;
雙表 1 萬筆,NOT IN 需 30 分鐘(笛卡兒積);改用外連接 LEFT JOIN ... WHERE b.key IS NULL 降至 1 分鐘內。
:OLD.DEPT_NO 取修改前值,:NEW.DEPT_NO 取修改後值,审計與衍生欄位維護必備。
WHEN-NEW-FORM-INSTANCE 觸發器中 set_window_property(FORMS_MDI_WINDOW, TITLE, '自訂標題')。WHEN-NEW-FORM-INSTANCE 呼叫自訂 Procedure,動態查詢賦值給 List Item,實現資料驅動列表。DB_SQL_COMMIT,表單中呼叫繞過限制。WHEN-CREATE-RECORD 觸發器 :VO_ID := :SYSTEM.TRIGGER_RECORD。ADD_PARAMETER(PM, 'THE_WHERE', ...) + 目標 Form WHEN-NEW-FORM-INSTANCE 中 SET_BLOCK_PROPERTY(..., DEFAULT_WHERE, :PARAMETER.THE_WHERE)。Clear_All_Master_Details 程序移除提示邏輯。TRUNCATE TABLE:DROP/DELETE 不釋放 Tablespace 空間,反覆操作導致空間耗盡。SVRMGR> shutdown 關閉實例mv 移動檔案STARTUP MOUNT 裝載資料庫 → ALTER DATABASE RENAME FILE '舊路徑' TO '新路徑'ALTER DATABASE OPEN 開啟實例這些技巧直擊生產環境痛點,兼顧效能、可維護性與運營安全,是 Oracle 開發者的寶貴財富。