Как я могу выполнить несколько задач в Liquibase?

Скажем, у меня есть это:

--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.
Как я могу выполнить и то, и другое?


person user5507535    schedule 23.04.2021    source источник


Ответы (2)


Oracle позволяет выполнять только один оператор в каждой команде. Это помогает предотвратить SQL-инъекцию.

Например, этот комикс не будет применяться в Oracle, поскольку команда выдаст ошибку ;, когда найдет второй оператор.

XKCD: Подвиги мамы

Если вы хотите, чтобы два оператора 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;
/
person MT0    schedule 23.04.2021

endDelimeter, который вы предоставили, - это /.

Это означает, что он будет выполняться только до тех пор, пока / в Liquibase.

Да, но это не значит, что он не будет выполнять запрос впереди. Это в основном указывает на конец оператора SQL. Ознакомьтесь с документацией по Liquibase.

Чтобы оба запроса были выполнены, вы должны завершить оба запроса с помощью /, как показано ниже:

--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.';
/

Обратитесь к приведенной выше ссылке для получения аналогичных примеров.

Надеюсь, я правильно понял ваш вопрос.

person Rakhi Agrawal    schedule 23.04.2021
comment
Я не очень уверен в точках с запятой, нужно ли их убрать или оставить. Пожалуйста, попробуйте установить их на место и один раз после их удаления. Один из них точно подойдет. Основная проблема - это отсутствующий / в конце второго запроса. - person Rakhi Agrawal; 23.04.2021