我在db2上有一个类型:
create type tipo_vehiculo as(
Descripcion varchar(30)
)MODE DB2SQL;
并且必须创建一个带pk的表,使用oid作为pk不起作用,所以我尝试在表上创建它,但IBM语法对我不起作用...
create table JORGEMONGE."tipo_vehiculo_t" of tipo_vehiculo(
"id_tipo_vehiculo_t" INT NOT NULL GENERATED ALWAYS AS IDENTITY ( START WITH 1 INCREMENT BY 1 MINVALUE -2147483648 MAXVALUE 2147483647 CACHE 20 ),
ref is oid user generated
);
在“id_tipo_vehiculo_t”后面找到意外的令牌“INTEGER”。预期的令牌可能包括:“WITH OPTIONS”.. SQLCODE = -104,SQLSTATE = 42601,DRIVER = 4.17.30
也是tred:
create table JORGEMONGE."tipo_vehiculo_t" of tipo_vehiculo(
"id_tipo_vehiculo_t" INT WITH OPTIONS NOT NULL GENERATED ALWAYS AS IDENTITY ( START WITH 1 INCREMENT BY 1 MINVALUE -2147483648 MAXVALUE 2147483647 CACHE 20 ),
ref is oid user generated
);
但得到:
在“ehiculo integer with”后面找到了意外的令牌“选项”。预期的令牌可能包括:“”.. SQLCODE = -104,SQLSTATE = 42601,DRIVER = 4.17.30
是否有想法在该类型表上设置pk?
答案 0 :(得分:1)
不知道如何在主键上设置标识规范,但我知道如何设置主键。你需要把它变成你的类型的一部分。
create type tipo_vehiculo as( Descripcion varchar(30), id_tipo_vehiculo INTEGER ) MODE DB2SQL;
create table JORGEMONGE."tipo_vehiculo_t" of tipo_vehiculo( ref is oid user generated, "id_tipo_vehiculo_t" WITH OPTIONS NOT NULL, PRIMARY KEY(id_tipo_vehiculo ) );
但是,我指出,由于无论如何都会自动为表格生成oid列(这就是ref is oid user generated
部分的含义),最好将其用作主键。
编辑:我已经弄清楚如何使用oid执行此操作。假设您采用上面的建议并使用对象引用作为主键,它将像这样
create type JORGEMONGE."tipo_vehiculo" as( Descripcion varchar(30) ) MODE DB2SQL;
create table JORGEMONGE."tipo_vehiculo_t" of JORGEMONGE."tipo_vehiculo"( ref is id_tipo_vehiculo user generated, PRIMARY KEY(id_tipo_vehiculo ) );
create sequence JORGEMONGE."id_tipo_vehiculo_seq" as ref(JORGEMONGE."tipo_vehiculo_t");
create trigger JORGEMONGE.gen_id_tipo_vehiculo no cascade before insert on JORGEMONGE."tipo_vehiculo_t" referencing new as new for each row mode db2sql set new.id_tipo_vehiculo = next value for JORGEMONGE.id_tipo_vehiculo_seq;