是否存在等同于#define
的SQL?
我在我的数据库中使用NUMBER(7)
作为ID,我想做类似的事情:
#define ID NUMBER(7)
然后我可以在创建表格时使用ID:
CREATE table Person (
PersonID ID,
Name VARCHAR2(31)
)
如果我发现以后需要更多/更少的空间,这将允许我轻松更改所有ID的类型。
答案 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表,这将使解决方案不可读和不舒服。遗憾。