2009-07-13 94 views
0

是否有與#define等效的SQL?#define等效於Oracle SQL?

我在我的數據庫使用NUMBER(7)爲ID的,我想這樣做:

CREATE table Person (
    PersonID ID, 
    Name VARCHAR2(31) 
) 

此:

#define ID NUMBER(7) 

然後,我可以在創建我的表中使用ID如果我意識到我稍後需要更多/更少的空間,將允許我輕鬆更改所有ID的類型。

+0

您是否打算允許動態重定義該列,即在創建表後通過一次更改來更改多個表中列的定義?我看到一些答案似乎旨在全局定義表格的首次創建屬性。 – dpbradley 2009-07-13 18:08:34

+0

我只想在創建表格時第一次使用該變量。我有很多表將使用ID'類型',如果我決定通過創建模式來改變ID大小,我希望能夠在一個地方進行更改。 – jjnguy 2009-07-13 18:10:14

+0

但是那麼你會不會有一半ID與一個ID大小一半? – dpbradley 2009-07-13 18:19:40

回答

4

在SQL Plus腳本可以使用替代變量是這樣的:

DEFINE ID = "NUMBER(7)" 

CREATE table Person (
    PersonID &ID., 
    Name VARCHAR2(31) 
); 
0

基本定義(類似於C#define)被稱爲查詢指令。查詢指令不能用於定義宏。

你可以閱讀關於查詢指令here,但我認爲你需要它是一個簡單的常量。

constant_name CONSTANT datatype := VALUE; 
0

不,在Oracle中無法做出這種動態定義。儘管Oracle確實有用戶定義的列類型的概念,可以讓您在單個對象中全局定義它,但是一旦創建了一個具有此類列的表,該定義將被凍結,您將得到一個「ORA-02303:如果您嘗試重新定義類型,則不能刪除或替換具有類型或表格依賴項的類型。

0

我強烈建議得到PowerDesigner中,你讓你通過使用域做到這一點的一個副本。

-1

此代碼聲明兩個常量。我們不打算使用常量本身,而是使用它們的類型。 在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包來創建表格,這會使解決方案變得不可讀和不舒服。抱歉。