Types 无法在类型化表DB2上定义主键

Types 无法在类型化表DB2上定义主键,types,db2,Types,Db2,我在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 A

我在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_vehiculu_t”之后发现意外标记“INTEGER”。预期代币可能包括:“带选项”。。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
);
但是你可以得到:

在“Ehillo integer with”之后发现意外标记“options”。预期的令牌可能包括:“”。。SQLCODE=-104,SQLSTATE=42601,DRIVER=4.17.30


有没有办法在键入的表上设置pk?

我不知道如何在主键上设置标识规范,但我知道如何设置主键。你需要让它成为你类型的一部分

 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是oid用户生成的
part的意思),因此最好将其用作主键

编辑:我已经想出了如何使用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;
文件如下: