#sql #xml #oracle #liquibase
Вопрос:
В настоящее время я присваиваю предопределенное значение свойства некоторым атрибутам тега, но я также хочу использовать его внутри xml-тегов. Ниже приведен пример, основанный на документации Liquibase:
<?xml version="1.0" encoding="utf-8"?>
<databaseChangeLog
xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.4.xsd"
>
<property name="schema.name" value="DBPECG"/>
<changeSet id="20201005103200-1" author="felipe.rudolfe" objectQuotingStrategy="QUOTE_ALL_OBJECTS">
<createTable schemaName="${schema.name}" tableName="TB_IES" >
.
.
.
</createTable>
</changeSet>
</databaseChangeLog>
И вот что я хочу сделать. Я хочу использовать schema.name таким образом, внутри тега sql:
<changeSet id="20201005103200-3" author="felipe.rudolfe" objectQuotingStrategy="LEGACY">
<sql>
ALTER TABLE ${schema.name}.TB_IES ADD CONSTRAINT...
</sql>
</changeSet>
Есть ли способ сделать это?
Комментарии:
1. XML обычно имеет корневой элемент, который окружает теги; однако в вашем примере у вас есть
property
тег иchangeSet
тег в корне. Вы дали полную структуру? Или есть окружающий корневой тег?2. Да, есть, я собираюсь это исправить. Спасибо за совет
Ответ №1:
Liquibase позволяет динамическую замену свойств в файлах журнала изменений. Мы можем настроить несколько свойств внутри файла, а затем использовать их везде, где это необходимо. В вашем случае мы можем просто настроить свойство "schemaName"
с некоторым значением, а затем использовать его в файле журнала изменений с использованием ${schemaName}
синтаксиса.
Liquibase назначает или определяет приоритет значения для настроенного свойства в следующем порядке:
- В качестве атрибута, переданного вашему бегуну по ликвидной базе.
- Как свойство системы JVM
- В качестве переменной среды
- В качестве атрибута CLI, если вы запускаете liquibase через командную строку
- В файле liquibase.properties
- В блоке параметры (элемент свойства таблицы DATABASECHANGELOG)
Вы можете сделать это, как показано ниже, пример фрагмента кода:
<?xml version="1.0" encoding="UTF-8"?>
<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog
http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.8.xsd">
<changeSet author="author" id="some-unique-id" context="some-context">
**Your SQL query/ transactional logic goes here**
<sql>
ALTER TABLE ${schemaName}.TB_IES ADD CONSTRAINT...
</sql>
</changeSet>
</databaseChangeLog>
В liquibase.properties
файле я настрою это свойство следующим образом:
schemaName=DBPECG
Примечание: приведенный выше пример использует свойство 1 (имя схемы). Вы можете использовать только еще больше.
Если вам нужна помощь в создании "liquibase.properties"
файла, перейдите по этой ссылке
Ваше здоровье!