2009-07-13 62 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包来创建表格,这会使解决方案变得不可读和不舒服。抱歉。