动态删除 H2 约束
Drop H2 constraint dynamically
我想删除 H2(MySQL 数据库)table 中的所有 FK,正如所描述的那样 here。我写了以下查询:
execute immediate ('alter table mytable drop constraint ' ||
QUOTE_IDENT((select "UNIQUE_INDEX_NAME" "INFORMATION_SCHEMA"."CONSTRAINTS"
where "TABLE_NAME"='mytable' and "CONSTRAINT_TYPE"='REFERENTIAL')));
但是,我运行进入以下异常:
org.h2.jdbc.JdbcSQLSyntaxErrorException: Constraint "PRIMARY_KEY_A"
not found; SQL statement: execute immediate ('alter table collection
drop constraint ' || QUOTE_IDENT((select "UNIQUE_INDEX_NAME" from
"INFORMATION_SCHEMA"."CONSTRAINTS" where "TABLE_NAME"='collection' and
"CONSTRAINT_TYPE"='REFERENTIAL'))) [90057-200]
你知道这是为什么吗?
您不能在 H2 中的一个命令中删除多个约束。
但是您可以使用以下命令删除一个名称未知的引用约束:
EXECUTE IMMEDIATE
SELECT 'ALTER TABLE mytable DROP CONSTRAINT '
|| QUOTE_IDENT(CONSTRAINT_NAME)
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS
WHERE TABLE_NAME ILIKE 'mytable'
AND CONSTRAINT_TYPE = 'FOREIGN KEY'
FETCH FIRST ROW ONLY;
如果有多个约束,则需要多次执行此命令,直到抛出异常。
我想删除 H2(MySQL 数据库)table 中的所有 FK,正如所描述的那样 here。我写了以下查询:
execute immediate ('alter table mytable drop constraint ' ||
QUOTE_IDENT((select "UNIQUE_INDEX_NAME" "INFORMATION_SCHEMA"."CONSTRAINTS"
where "TABLE_NAME"='mytable' and "CONSTRAINT_TYPE"='REFERENTIAL')));
但是,我运行进入以下异常:
org.h2.jdbc.JdbcSQLSyntaxErrorException: Constraint "PRIMARY_KEY_A" not found; SQL statement: execute immediate ('alter table collection drop constraint ' || QUOTE_IDENT((select "UNIQUE_INDEX_NAME" from "INFORMATION_SCHEMA"."CONSTRAINTS" where "TABLE_NAME"='collection' and "CONSTRAINT_TYPE"='REFERENTIAL'))) [90057-200]
你知道这是为什么吗?
您不能在 H2 中的一个命令中删除多个约束。
但是您可以使用以下命令删除一个名称未知的引用约束:
EXECUTE IMMEDIATE
SELECT 'ALTER TABLE mytable DROP CONSTRAINT '
|| QUOTE_IDENT(CONSTRAINT_NAME)
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS
WHERE TABLE_NAME ILIKE 'mytable'
AND CONSTRAINT_TYPE = 'FOREIGN KEY'
FETCH FIRST ROW ONLY;
如果有多个约束,则需要多次执行此命令,直到抛出异常。