Unix変数をSQLファイルの値に置き換える

Unix変数をSQLファイルの値に置き換える

ログを特定の場所にスプールするには、複数のunix変数を含むsqlファイルがあり、sqlファイルを実行する前にunix変数を実際のパスに置き換える必要があります。

`cat a.sql
  accept v_answer prompt "Please Enter Name:"
  spool $SQL_SPOOL_LOG_DIR/db_lists.log
  select name from dbs;
  spool off
  spool $SQL_SPOOL_LOG_DIR/db_test.log
  declare
    v_sql varchar2(250);
   begin
     v_sql := 'alter system set container=db; ';
     dbms_output.put_line ( v_sql);
     v_sql := 'create table test (eno number);';
     dbms_output.put_line ( v_sql);
    v_sql := 'insert into test values (23423);';
     dbms_output.put_line ( v_sql); 
   end;
   /
  spool off
  ! grep -i 'alter\|create\|insert' spool $SQL_SPOOL_LOG_DIR/db_test.log > spool $SQL_CUSTOM_SQL_DIR/table_create.sql
  spool $SQL_SPOOL_LOG_DIR/table_create.log
  @$SQL_CUSTOM_SQL_DIR/table_create.sql
  spool off
exit;`

SQLファイルを実行する前に、次の変数を実際のパスに置き換えたいと思います。

`$SQL_SPOOL_LOG_DIR
 $SQL_CUSTOM_SQL_DIR`

ベストアンサー1

このファイルの周りに bash ラッパーを作成して使用します。sedSQLファイルを実行する前に、変数を実際の値に置き換えてください。

ハードコーディングされた値の例:

#!/bin/bash
SQL_SPOOL_LOG_DIR="/path/to/log/dir"
SQL_CUSTOM_SQL_DIR="/path/to/sql/dir"

sed -i 's|$SQL_SPOOL_LOG_DIR|'"$SQL_SPOOL_LOG_DIR"'|g' a.sql
sed -i 's|$SQL_CUSTOM_SQL_DIR|'"$SQL_CUSTOM_SQL_DIR"'|g' a.sql


mysql < a.sql #example

おすすめ記事