#define等效于Oracle SQL?

时间:2009-07-13 16:17:16

标签: sql oracle

是否存在等同于#define的SQL?

我在我的数据库中使用NUMBER(7)作为ID,我想做类似的事情:

#define ID NUMBER(7)

然后我可以在创建表格时使用ID:

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

如果我发现以后需要更多/更少的空间,这将允许我轻松更改所有ID的类型。

5 个答案:

答案 0 :(得分:4)

在SQL Plus脚本中,您可以使用这样的替换变量:

DEFINE ID = "NUMBER(7)"

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

答案 1 :(得分:0)

基本定义(类似于C #define)称为查询指令。查询指令不能用于定义宏。

您可以阅读有关查询指令here但我认为您需要的是一个简单的常量。

constant_name CONSTANT datatype := VALUE; 

答案 2 :(得分:0)

不,没有办法在Oracle中进行这种动态定义。虽然Oracle确实具有用户定义列类型的概念,允许您在单个对象中全局定义它,但是一旦创建了具有此类型列的表,该定义就会被冻结,您将获得“ORA-02303:如果您尝试重新定义类型,则不能删除或替换具有类型或表依赖项的类型。

答案 3 :(得分:0)

我强烈建议您获取PowerDesigner的副本,您可以通过使用域来实现此目的。

答案 4 :(得分:-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;
/

已编辑:正如dpbradley所说,此代码存在问题。 Oracle不允许在开始端块中直接创建表。 DBMS_SQL包必须用于创建一个dinamically表,这将使解决方案不可读和不舒服。遗憾。