incapaz de fazer spool através do shell (ksh)

0

Eu escrevi um script de shell no qual eu defini variáveis: Last_Month , last_date e first_date e estou tentando executar o sql abaixo do shell:

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

conteúdo de 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;

mas ao executar o shell, estou ficando abaixo do erro:

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

Alguma ajuda?

    
por User123 24.04.2018 / 07:04

1 resposta

1

Com sqlplus você deve usar abordagem diferente para as variáveis do shell. Seu comando deve se tornar:

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

e seu script sql devem ser:

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;
    
por 24.04.2018 / 08:22