2007-12-12

在 Oracle 集中管理自訂資料型態 (User-Defined Types Management)

阿布洛格 Oracle系統運行過一段時間後,資料庫難免會有欄位的更動,或甚至是邏輯的調整,開發的 Package/Procedure 也隨時間與日俱增。有時候,系統的某個調整,可能就會牽連到不少相關的程式必須隨之修改與更新。當中最瑣碎的,莫過於資料長度或甚至是型態的變更。

雖然一開始可能很有遠見地,使用 table_name.column_name%TYPE 的方式來宣告變數的型態,資料欄位的調整就可以直接地被套用。但是,有時程式數量龐大,有時是程式寫作習慣不佳,而且,也並不一定每個變數都有相對應的欄位可以這樣宣告,這時候,集中管理變數型態的方式可以參考看看。

一般來說, PL/SQL 變數的資料型態的宣告, 長得像這樣:
var1    VARCHAR2 (100);
var2    table_name.column_name%TYPE;


但是,如果想要集中管理它們,可以使用以下方式:
Step 1. 建立一個 PACKAGE,作為型態宣告與定義的容器:
CREATE OR REPLACE 
PACKAGE pg_types_def
IS
-- 宣告一個 RECORD TYPE TYPES_DEF
TYPE TYPES_DEF IS RECORD ( var1_type    VARCHAR2(100),
var2_type    table_name.column_name%TYPE);
-- 宣告一個變數 MY_TYPES, 指定型別為 TYPES_DEF
MY_TYPES  TYPES_DEF;
END;
/


Step 2. 在程式中引用:
var1    pg_types_def.MY_TYPES.var1_type%TYPE;
var2    pg_types_def.MY_TYPES.var2_type%TYPE;


所有程式中的變數宣告,都對應回 pg_types_def,而不直接對應 table_name.column_name%TYPE,更不要在各處自行宣告啥 VARCHAR2(n), NUMBER(n,m)之類的,如此,便可達成集中管理資料型態;在需要之時,只要變動 pg_types_def 內的定義,即可達成所有宣告為該型別的變數都可連動對應。

0 回應 :

張貼留言

讓阿布知道你對這篇文章的想法吧!