"쉘 스크립트에서 호출된 oracle sql 파일에 변수 값을 입력으로 전달"하는 것이 가능한지 궁금합니다.
나는 이것을 시도하고 있지만 작동하지 않습니다.
SQL 파일:
set head on
set feed on
set termout off
set trimspool on
spool ts_verify.log
select tablespace_name from dba_tablespaces where tablespace_name='$ts_name';
spool off
set termout on
set trimspool off
exit
쉘 스크립트:
ts_name=''
echo "Please enter the Tablespace Name for which you want to add datafile"
read ts_name
sqlplus -s "/ as sysdba" << EOF
@ts.sql
EXIT
EOF
감사합니다, 아디트야
답변1
SQL 스크립트를 다음 자리 표시자가 포함된 템플릿 파일로 변환합니다.진짜일치하기 쉽습니다. 그런 다음 변수 값을 알고 나면 템플릿에서 실제 SQL 스크립트를 만듭니다.
template.sql
:
set head on
set feed on
set termout off
set trimspool on
spool ts_verify.log
select tablespace_name from dba_tablespaces where tablespace_name='@@TABLESPACENAME@@';
spool off
set termout on
set trimspool off
exit
귀하의 스크립트:
#!/bin/sh
unset ts_name
echo "Please enter the Tablespace Name for which you want to add datafile"
read -r ts_name
# create real SQL script and pass it to `sqlplus`:
sed "s/@@TABLESPACENAME@@/$ts_name/g" template.sql |
sqlplus -s "/ as sysdba"