Передача переменной из сценария оболочки в оператор SQL - PullRequest
1 голос
/ 18 декабря 2009


Я пытался сделать cat1.txt как переменную ($ 2), чтобы он был вставлен в оператор выбора 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)


СКРИПТ МОЕЙ ОБОЛОЧКИ

#!/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/$PASSWORD@$ORACLE_SID @$SCRIPT/log.sql $FILENM

Ответы [ 2 ]

1 голос
/ 22 декабря 2009
#!/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

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

0 голосов
/ 19 декабря 2009

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...