쉘(ksh)을 통해 스풀링할 수 없습니다.

쉘(ksh)을 통해 스풀링할 수 없습니다.

변수가 정의된 쉘 스크립트 를 작성 Last_Month하고 쉘에서 다음 SQL을 실행하려고 했습니다.last_datefirst_date

/app/oracle/product/10.2.0/bin/sqlplus -s user_name/passwd @effective_date.sql

콘텐츠 effective_date.sql:

set heading off
set feedback off
set verify off
set pagesize 50000
set trimspool on
set wrap off
set newpage none
set linesize 2000

spool /home/dir/file_${Last_Month};

select * from table_1
where effective_date between to_date("$first_date",'dd-mm-yyyy') and to_date("$last_date",'dd-mm-yyyy');

spool off;
exit;

그러나 쉘을 실행하면 다음과 같은 오류가 발생합니다.

SP2-0332: Cannot create spool file.
where effective_date between to_date("$first_date",'dd-mm-yyyy') and to_date("$last_date",'dd-mm-yyyy')
                                                                             *
ERROR at line 2:
ORA-00904: "$last_date": invalid identifier


not spooling currently

도움이 필요하세요?

답변1

sqlplus쉘 변수에는 다른 접근 방식을 사용해야 합니다 . 귀하의 명령은 다음과 같아야 합니다:

/app/oracle/product/10.2.0/bin/sqlplus -s user_name/passwd @effective_date.sql "$Last_Month" "$first_date" "$last_date" 

SQL 스크립트는 다음과 같아야 합니다.

set heading off
set feedback off
set verify off
set pagesize 50000
set trimspool on
set wrap off
set newpage none
set linesize 2000

spool /home/dir/file_'&1';

select * from table_1
where effective_date between to_date('&2','dd-mm-yyyy') and to_date('&3','dd-mm-yyyy');

spool off;
exit;

관련 정보