6 votes

Erreur de syntaxe dans une déclaration SQL avec H2

J'ai une erreur lors de certaines instructions sql dans la base de données H2. Ces instructions sql proviennent d'une base de données Hibernate. SchemaExport : Voici les instructions sql :

create table CONTACTS (
    person_id bigint not null,
    contact_id bigint not null,
    primary key (person_id, contact_id)
)

 create table PERSON (
    id bigint generated by default as identity,
    FNAME varchar(55),
    NAME varchar(55),
    primary key (id)
)

alter table CONTACTS 
    add constraint UK_r5plahp7wqcsd47hscckyrxgd unique (contact_id)

alter table CONTACTS 
    add constraint FK_r5plahp7wqcsd47hscckyrxgd 
    foreign key (contact_id) 
    references PERSON

alter table CONTACTS 
    add constraint FK_90n1kse999lanaepr0v6hcgtv 
    foreign key (person_id) 
    references PERSON

Par exemple, cette ligne ne s'exécutera pas en H2.

L'erreur dit : [ERROR] Caused by org.h2.jdbc.JdbcSQLException: Syntax error in SQL statement : CREATE TABLE CONTACTS ( .... <<The same code from above>>

Comment puis-je faire en sorte que cette instruction SQL soit exécutée dans H2.

25voto

Dimitri Points 2261

J'ai enfin trouvé la raison pour laquelle j'avais une erreur de syntaxe.

Je suis en train de faire un SchemaExport/SchemaUpdate avec Hibernate et je n'ai pas spécifié de délimiteur dans l'instruction SQL.

Pour spécifier un délimiteur, utilisez l'option setDelimiter méthode. Par exemple,

export.setDelimiter(";");
update.setDelimiter(";");

D'ailleurs, pour identifier les erreurs de syntaxe dans H2 avec les instructions SQL, trouvez la fonction * dans la déclaration et cela donnera la ligne de votre erreur.

-4voto

La déclaration DDL doit être sur une seule ligne.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X