로그를 특정 위치로 스풀링하기 위해 여러 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