如何执行无序的SQL脚本



我有一个SQL脚本,但脚本中的语句顺序有问题

例如

INSERT INTO PERMISSIONS_FOR_ROLE (ROLE_ID, PERMISSION_ID) VALUES (3, 8);
INSERT INTO permissions (id, name) VALUES (8, 'update');

脚本中出现的顺序应该相反!这导致了一个错误,因为当第一条语句执行时,id为8的外键尚未插入

导致:

[Code: -177, SQL State: 23503]  integrity constraint violation: 
foreign key no parent; PERMISSIONS_FOR_ROLE_PERM_FK table: PERMISSIONS_FOR_ROLE value: 8

用于创建关系的语句如下

create table PERMISSIONS ( ID bigint not null, NAME varchar(255), primary key (ID) );
create table PERMISSIONS_FOR_ROLE ( ROLE_ID bigint not null, PERMISSION_ID bigint not null, primary key (ROLE_ID, PERMISSION_ID) );
alter table PERMISSIONS_FOR_ROLE add constraint permissions_for_role_perm_fk foreign key (PERMISSION_ID) references PERMISSIONS;

关于如何执行这样的脚本,有什么建议吗?我尝试手动更改顺序,脚本执行正常,但在作为ANT构建目标的一部分运行时,是否有其他方法可以做到这一点。

对于具有无序的大型脚本的大量插入,可以使用禁用引用完整性检查

SET DATABASE REFERENTIAL INTEGRITY FALSE 

参见http://hsqldb.org/doc/2.0/guide/management-chapt.html#mtc_sql_settings关于如何在插入后检查可能的违规行为。

最新更新