Попытка сослаться на переменную среды в SQLcl может быть немного сложной. Вот три способа сделать это.
1. Передайте переменную в скрипт.
# Create a script that accepts a command line parameter cat > test.sql <<EOF define FOO='&1' insert into t1 (txt) values ('&FOO'); select txt from t1; exit; EOF
2. Используйте JavaScript в SQLcl
export FOO="BAR" sql -L -s usr/pwd@db SQL> script var foovariable = java.lang.System.getenv("FOO"); var binds = { "FOO": foovariable }; var sql = [ "begin", "insert into t1 (txt) values(:FOO);", "end;" ].join("\n"); var result = util.execute(sql, binds); if (!result){ ctx.write("ERROR\n"); ctx.write(util.getLastException()); ctx.write("\n"); } / select txt from t1; TXT ________ BAR
3. Используйте журнал изменений Liquibase
Создать файл журнала изменений
--liquibase formatted sql --changeset christoph:1 insert into t1 (txt) values ('${FOO}'); --rollback not required
После экспорта переменной, как указано выше, войдите в SQLcl и выполните журнал изменений Liquibase.
SQL> lb update -changelog-file my_changelog.sql --Starting Liquibase at 09:37:54 (version 4.17.0 #0 built at 2022-11-02 21:48+0000) -- Loaded 1 changeSets Running Changeset: my_changelog.sql::1::christoph No Errors Encountered SQL> select txt from t1; TXT ________ BAR