쉘 스크립트에서 호출된 oracle sql 파일에 변수 값을 입력으로 전달합니다.

쉘 스크립트에서 호출된 oracle sql 파일에 변수 값을 입력으로 전달합니다.

"쉘 스크립트에서 호출된 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"

관련 정보