J'ai deux tables définies comme suit:instruction INSERT pour le modèle d'héritage de table de classe
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)
)
et
create table BASE (
ID uuid,
primary key (ID)
)
BASE est une sous-classe de MY_COMPONENT.
J'ai la contrainte suivante:
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)
Ce que je suis en train de faire est quelque chose comme
INSERT INTO BASE(ID, VERSION, PRODUCT_NUMBER, DESCRIPTION, MANUFACTURER);
Comme je l'ai découvert cette syntaxe exacte ne fonctionne pas parce que BASE
ne le fait pas ont un PRODUCT_NUMBER
, DESCRIPTION
, ou MANUFACTURER
car ceux-ci sont stockés dans le tableau MY_COMPONENT
. J'ai également essayé d'insérer une ligne dans MY_COMPONENT
avec NEWID()
et en utilisant ce même ID
pour essayer et insérer dans BASE
. J'ai également essayé l'inverse de cela, en insérant d'abord le BASE
puis en utilisant son ID
pour l'insérer dans MY_COMPONENT
. Ces deux erreurs lancent des violations de contraintes uniques.
Comme je suis sûr est clair, je suis très nouveau à la programmation de base de données. Ces tables et contraintes ne sont pas ma création; J'utilise la plate-forme CUBA pour le développement et ces scripts de création de table sont générés automatiquement pour moi. Je comprends la syntaxe de l'instruction CREATE mais le but et l'utilisation de FOREIGN_KEY ne sont pas vraiment clairs pour moi. C'est peut-être mon lien manquant. Mais toute directive serait très appréciée.
Vous êtes tout à fait raison. J'essayais d'exécuter mes requêtes via la fonction pour exécuter des scripts de mise à jour intégrés au Studio de Cuba. J'ai déplacé mes scripts de test dans le script INIT_DATA que Cuba exécute lors de la création d'une base de données et les données ont été insérées avec succès. Je ne suis pas sûr que ce soit un bug de leur côté. Merci bonne âme. –
@ personne ne vous êtes les bienvenus, j'ai ajouté un proc stocké si vous voulez faire le double insert en une seule fois;) – Blag