2

Oracle出力(出力の選択)がcand1 cand2 cand3 cand62であるため、シェルスクリプトを使用してこれらの値を配列に格納する必要があります。

#!/bin/bash
instant_client="/root/ora_client/instantclient_11_2"
output=`$instant_client/sqlplus -s HRUSER/HRUSER@TOMLWF <<EOF
set heading off
set feedback off
set lines 10000
set pagesize 10000

select count (1) from onboardingcandidates o, candidatedetails c where o.candidateid=c.candidateid and o.JOININGSTATUS='0091' and to_date(o.joiningdate)=to_date(sysdate+5);

EOF
exit

query=`$instant_client/sqlplus -s HRUSER/HRUSER@TOMLWF <<EOF
set heading off
set feedback off
set lines 10000
set pagesize 10000

select o.candidateid from onboardingcandidates o, candidatedetails c where o.candidateid=c.candidateid and o.JOININGSTATUS='0091' and to_date(o.joiningdate)=to_date(sysdate+5);
EOF
exit


i=0
echo "Throwing individual arrays:"
while [ $i -le $output ]
do
a=${query[$i]}
echo Candidate[$i]=$a
i=$(($i+1))
done

出力は

Throwing individual arrays:

    Candidate[0]= cand1 cand2 cand3 cand62
    Candidate[1]=
    Candidate[2]=
    Candidate[3]=
    Candidate[4]=

必要な出力

Throwing individual arrays:

    Candidate[0]= cand1   
    Candidate[1]= cand2
    Candidate[2]= cand3
    Candidate[3]= cand62
4

2 に答える 2

2

このようなもの:

$ query="cand1 cand2 cand3 cand62"
$ read -a Candidate <<<$query
$ echo ${Candidate[0]}
cand1
$ echo ${Candidate[1]}
cand2

sqlplusを使用していないときは、「query」変数に上記のようなものが含まれています。上記のように全体を配列に読み込むだけで、値にアクセスできます。

于 2012-11-01T11:14:39.590 に答える
2

問題はquery、配列ではなく文字列であるため、${query[$i]}期待どおりに機能しないことです。

一般に、文字列を配列に変換するには、次のようにします。

$ string="foo bar"
$ array=($string)
$ echo ${array[0]}
foo
$ echo ${array[1]}
bar

この場合、sqlplusコマンドを括弧で囲むと、出力は配列に格納されます。このような:

query=(`$instant_client/sqlplus -s HRUSER/HRUSER@TOMLWF <<EOF
set heading off
set feedback off
set lines 10000
set pagesize 10000

select o.candidateid from onboardingcandidates o, candidatedetails c where o.candidateid=c.candidateid and o.JOININGSTATUS='0091' and to_date(o.joiningdate)=to_date(sysdate+5);
EOF)

query次に、インデックスを使用して配列内の要素にアクセスできます。${query[$i]}

于 2012-11-01T11:24:09.833 に答える