说我有这个:
--changeset asdf:1 runAlways:false runOnChange:false failOnError:true endDelimiter:"/"
declare
XXXXX
begin
DO SOMETHING
end;
/
comment on column my_table.my_col is 'My comment.';
这意味着它只会执行到 Liquibase 中的 /
。
我怎样才能同时执行?
答案 0 :(得分:0)
Oracle 只允许在每个命令中执行一条语句。这有助于防止 SQL 注入。
例如,此漫画不适用于 Oracle,因为该命令在找到第二个语句时会在 ;
处出错。
如果您希望在一个命令中同时执行两个 Oracle 语句,那么您需要使用匿名 PL/SQL 块将它们包装成一个(复合)语句(并将任何 DDL 语句放在 EXECUTE IMMEDIATE
声明):
BEGIN
declare
XXXXX NUMBER;
begin
NULL; -- Do something
end;
EXECUTE IMMEDIATE 'comment on column my_table.my_col is ''My comment.''';
END;
/
答案 1 :(得分:0)
您提供的 endDelimeter
是 /
。
这意味着它只会在 Liquibase 中的 / 之前执行。
是的,但这并不意味着它不会提前执行查询。它基本上表示 SQL 语句的结束。请查看liquibase docs
对于要执行的两个查询,您应该使用 /
结束两个查询,如下所示:
--changeset asdf:1 runAlways:false runOnChange:false failOnError:true endDelimiter:"/"
declare
XXXXX
begin
DO SOMETHING
end;
/
comment on column my_table.my_col is 'My comment.';
/
有关类似示例,请参阅上面的链接。
希望我答对了你的问题。