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

관련 정보