2009-12-18 5 views
1


Я пытался сделать cat1.txt переменной ($ 2), чтобы он был вставлен в sql select statement. Есть ли способ сделать это?
Передача переменной из сценария оболочки в sql-оператор

my cat1.txt 
1111 
2334 
2234 
3333 
4444 
.... 
.... 
etc. 


мой SQL Заявление

set echo off linesize 280 pagesize 0 newpage 0 feedback 1 verify off head off trimspool on 
alter session set sort_area_size=104857600; 

define filename = &1 

spool &&filename 
prompt DATE TIME Service Name Amount 

select trim(to_char(trans_time,'yyyymmdd')) || chr(9) || 
    trim(to_char(trans_time,'hh24miss')) || chr(9) || 
    trim(prod_name)|| chr(9) || 
    (prod_price) 
where m_date = 11 and day >= 23 and day <= 30 
and (prod_bill) in ('1111','2334','2234','3333','4444') 
/
spool off 
exit 


Я хочу попробовать это, пожалуйста, смотрите ниже. Вместо ручной настройки prod_bill делает ее переменной как имя файла. Все, что я должен добавить в свой сценарий оболочки? Спасибо :-)

from prod_trans 
where m_date = 11 and day >= 23 and day <= 30 
and (prod_bill) in ($2) 


MY скриптом командного

#!/bin/sh 

export ORACLE_BASE=/u01/app/oracle 
export ORACLE_SID=prod 
export ORACLE_HOME=/u01/app/oracle/product/9.2.0 
export ORACLE_BASE ORACLE_HOME ORACLE_SID 
export PATH=$PATH:/usr/local/bin:$ORACLE_HOME/bin:/usr/sbin:/opt/java1.5/bin 
export USERNAME=prods 
export PASSWORD=prods 
export OUT_PATH=/home/prod/reports/adhoc/REp 
export SCRIPT=$OUT_PATH/BICScripts/Translog 
export OUTPUT=/home/prod/reports/adhoc/REp/Scripts/log/OUTPUT 
export FILENM=$OUTPUT/log_`date +%y%m%d`.txt 
sqlplus -s $USERNAME/[email protected]$ORACLE_SID @$SCRIPT/log.sql $FILENM 
+0

Какая версия Oracle? –

ответ

0

Я не знаю, есть ли способ получить доступ к БД Oracle из сценария оболочки, но вы можете использовать, например, Perl? Я думаю, это было бы довольно легко сделать, используя DBI для доступа к db.

Конечно, вы можете просто проанализировать файл .sql -file, используя сценарий оболочки, чтобы добавить prod_bills из файла cat1.txt прямо к нему.

+0

Спасибо, я уже использовал скрипт perl :-) – Cez

1
#!/bin/sh 
v_var=$1 
sqlplus -S system/manager << EOF`enter code here` 
SELECT username, account_status, expiry_date 
FROM dba_users WHERE lower(username)=lower('$v_var'); 
exit; 
EOF 

Надеюсь, он решает проблему, и я ответил правильно.

Смежные вопросы