是否有與#define
等效的SQL?#define等效於Oracle SQL?
我在我的數據庫使用NUMBER(7)
爲ID的,我想這樣做:
CREATE table Person (
PersonID ID,
Name VARCHAR2(31)
)
此:
#define ID NUMBER(7)
然後,我可以在創建我的表中使用ID如果我意識到我稍後需要更多/更少的空間,將允許我輕鬆更改所有ID的類型。
是否有與#define
等效的SQL?#define等效於Oracle SQL?
我在我的數據庫使用NUMBER(7)
爲ID的,我想這樣做:
CREATE table Person (
PersonID ID,
Name VARCHAR2(31)
)
此:
#define ID NUMBER(7)
然後,我可以在創建我的表中使用ID如果我意識到我稍後需要更多/更少的空間,將允許我輕鬆更改所有ID的類型。
在SQL Plus腳本可以使用替代變量是這樣的:
DEFINE ID = "NUMBER(7)"
CREATE table Person (
PersonID &ID.,
Name VARCHAR2(31)
);
基本定義(類似於C#define)被稱爲查詢指令。查詢指令不能用於定義宏。
你可以閱讀關於查詢指令here,但我認爲你需要它是一個簡單的常量。
constant_name CONSTANT datatype := VALUE;
不,在Oracle中無法做出這種動態定義。儘管Oracle確實有用戶定義的列類型的概念,可以讓您在單個對象中全局定義它,但是一旦創建了一個具有此類列的表,該定義將被凍結,您將得到一個「ORA-02303:如果您嘗試重新定義類型,則不能刪除或替換具有類型或表格依賴項的類型。
我強烈建議得到PowerDesigner中,你讓你通過使用域做到這一點的一個副本。
此代碼聲明兩個常量。我們不打算使用常量本身,而是使用它們的類型。 在create table語句中,我們將Name和Blood聲明爲「相同類型的blood_type和name_type」。如果後面我們需要更多的空間,我們只需要改變常量的類型,並且腳本中用%TYPE聲明的所有字段都會受到影響。我希望它能幫助你。
DECLARE
blood_type CONSTANT CHAR;
name_type CONSTANT varchar2(10);
BEGIN
create table patient (
Name name_type%TYPE,
Blood blood_type%TYPE
)
END;
/
EDITED:作爲dpbradley說,與此代碼的問題。 Oracle不允許直接在開始塊內創建表。必須使用DBMS_SQL包來創建表格,這會使解決方案變得不可讀和不舒服。抱歉。
您是否打算允許動態重定義該列,即在創建表後通過一次更改來更改多個表中列的定義?我看到一些答案似乎旨在全局定義表格的首次創建屬性。 – dpbradley 2009-07-13 18:08:34
我只想在創建表格時第一次使用該變量。我有很多表將使用ID'類型',如果我決定通過創建模式來改變ID大小,我希望能夠在一個地方進行更改。 – jjnguy 2009-07-13 18:10:14
但是那麼你會不會有一半ID與一個ID大小一半? – dpbradley 2009-07-13 18:19:40