代码之家  ›  专栏  ›  技术社区  ›  no-one

类表继承模型的INSERT语句

  •  3
  • no-one  · 技术社区  · 7 年前

    我有两个表,定义如下:

    create table MY_COMPONENT (
    ID uuid,
    VERSION integer not null,
    CREATE_TS timestamp,
    CREATED_BY varchar(50),
    UPDATE_TS timestamp,
    UPDATED_BY varchar(50),
    DELETE_TS timestamp,
    DELETED_BY varchar(50),
    DTYPE varchar(31),
    --
    PRODUCT_NUMBER varchar(255),
    DESCRIPTION varchar(255),
    MANUFACTURER varchar(100),
    --
    primary key (ID)
    )
    

    create table BASE (
    ID uuid,
    primary key (ID)
    )
    

    BASE是MY_组件的一个子类。

    我有以下限制:

    create unique index IDX_DEIPRODUCTCONFIG2_MY_COMPONENT_UK_PRODUCT_NUMBER 
    on DEIPRODUCTCONFIG2_MY_COMPONENT (PRODUCT_NUMBER) where DELETE_TS is null 
    
    alter table DEIPRODUCTCONFIG2_BASE add constraint FK_DEIPRODUCTCONFIG2_BASE_ID 
    foreign key (ID) references DEIPRODUCTCONFIG2_MY_COMPONENT(ID)
    

    我想做的是

    INSERT INTO BASE(ID, VERSION, PRODUCT_NUMBER, DESCRIPTION, MANUFACTURER);
    

    BASE 没有 PRODUCT_NUMBER , DESCRIPTION MANUFACTURER 因为这些是存储在 MY_COMPONENT 桌子我还尝试在中插入一行 MY_组件 具有 NEWID() ID 尝试插入到 . 我也尝试了相反的方法,插入 基础 首先使用its 身份证件 插入到 MY_组件 . 这两个都会引发关于唯一约束冲突的错误。

    很明显,我对数据库编程非常陌生。这些表和约束不是我创建的;我正在使用CUBA平台进行开发,这些表创建脚本是自动为我生成的。我确实理解CREATE语句的语法,但外键的用途和用法对我来说并不清楚。也许这就是我缺失的一环。但如果能提供任何指导,我们将不胜感激。

    1 回复  |  直到 7 年前
        1
  •  1
  •   Blag    7 年前

    我可能错过了一个要点,但我无法再现你的问题,插入 MY_COMPONENT 然后 BASE 在我看来。。。

    CREATE FUNCTION addbase(
        version INTEGER,
        product_number VARCHAR(255)
      --
    ) RETURNS VOID AS $$
    DECLARE
        uid uuid := uuid_generate_v4();
    BEGIN
        INSERT INTO my_component(id,version,product_number) 
        VALUES(uid, version,product_number);
        INSERT INTO base(id) 
        VALUES(uid);
    END ;
    $$ LANGUAGE plpgsql /
    

    完整答案

    SQL Fiddle

    PostgreSQL 9.6架构设置 :

    CREATE EXTENSION IF NOT EXISTS "uuid-ossp"
    /
    create table MY_COMPONENT (
    ID uuid,
    VERSION integer not null,
    CREATE_TS timestamp,
    CREATED_BY varchar(50),
    UPDATE_TS timestamp,
    UPDATED_BY varchar(50),
    DELETE_TS timestamp,
    DELETED_BY varchar(50),
    DTYPE varchar(31),
    --
    PRODUCT_NUMBER varchar(255),
    DESCRIPTION varchar(255),
    MANUFACTURER varchar(100),
    --
    primary key (ID)
    )
    /
    create table BASE (
    ID uuid,
    primary key (ID)
    )
    /
    
    create unique index IDX_DEIPRODUCTCONFIG2_MY_COMPONENT_UK_PRODUCT_NUMBER 
    on MY_COMPONENT (PRODUCT_NUMBER) where DELETE_TS is null 
    /
    alter table BASE add constraint FK_DEIPRODUCTCONFIG2_BASE_ID 
    foreign key (ID) references MY_COMPONENT(ID)
    /
    
    
    CREATE FUNCTION addbase(
        version INTEGER,
        product_number VARCHAR(255)
      --
    ) RETURNS VOID AS $$
    DECLARE
        uid uuid := uuid_generate_v4();
    BEGIN
        INSERT INTO my_component(id,version,product_number) 
        VALUES(uid, version,product_number);
        INSERT INTO base(id) 
        VALUES(uid);
    END ;
    $$ LANGUAGE plpgsql / 
    

    :

    insert into MY_COMPONENT(ID,VERSION,PRODUCT_NUMBER) 
      values(uuid_generate_v4(), 1,'1-dynamic')
    

    Results : 查询2 :

    insert into BASE(ID) select ID from MY_COMPONENT where PRODUCT_NUMBER ='1-dynamic'
    

    Results : 查询3 :

    insert into MY_COMPONENT(ID,VERSION,PRODUCT_NUMBER) 
      values('774033f8-52a6-4b1f-8602-03ce3c5a7432', 2,'2-static')
    

    Results : :

    insert into BASE(ID) 
      values('774033f8-52a6-4b1f-8602-03ce3c5a7432')
    

    Results 查询5 :

    select addbase( 44,'3-stored-procedure')
    

    Results :

    | addbase |
    |---------|
    |         |
    

    查询6

    select * from MY_COMPONENT
    

    Results :

    |                                   id | version | create_ts | created_by | update_ts | updated_by | delete_ts | deleted_by |  dtype |     product_number | description | manufacturer |
    |--------------------------------------|---------|-----------|------------|-----------|------------|-----------|------------|--------|--------------------|-------------|--------------|
    | e48124ff-a26c-4d10-93a7-48da77b613e6 |       1 |    (null) |     (null) |    (null) |     (null) |    (null) |     (null) | (null) |          1-dynamic |      (null) |       (null) |
    | 774033f8-52a6-4b1f-8602-03ce3c5a7432 |       2 |    (null) |     (null) |    (null) |     (null) |    (null) |     (null) | (null) |           2-static |      (null) |       (null) |
    | b6ecb3ce-e3c2-4f68-8a19-9cfceeba1263 |      44 |    (null) |     (null) |    (null) |     (null) |    (null) |     (null) | (null) | 3-stored-procedure |      (null) |       (null) |
    

    查询7 :

    select * from BASE
    

    Results

    |                                   id |
    |--------------------------------------|
    | e48124ff-a26c-4d10-93a7-48da77b613e6 |
    | 774033f8-52a6-4b1f-8602-03ce3c5a7432 |
    | b6ecb3ce-e3c2-4f68-8a19-9cfceeba1263 |