2017-06-28 3 views
0

変数を設定するシェル・ファイルがあります。それはこのように見えます。シェルからスキーマ名とdblinkをパラメータとして渡したoracleストアドprocの呼び出し

CREATE OR REPLACE procedure MIG.dblink(schema1 in varchar, link1 in varchar, count1 out number) 
IS 

BEGIN 

SELECT COUNT(1) INTO COUNT1 FROM [email protected] where trunc(csactivated) > trunc(sysdate-1); 

END; 
/

私はこれを以下のようなシェルファイルから呼び出しています。

source dataenv.sh #sets up the following variables. 

    echo "SCHEMA_NAME IS $SCHEMA_NAME" 
    echo "LINKNAME IS $LINKNAME" 
    echo "ORACLEHOME IS $ORACLEHOME" 
    echo "DBUSER IS $DBUSER" 
    echo "DBPASSWORD IS $DBPASSWORD" 
    echo "HOSTNAME IS $HOST_NAME" 

    output1=0 

    output=$(
     $ORACLEHOME/bin/sqlplus -s $DBUSER/$DBPASSWORD <<EOF 
     exec dblink('$SCHEMA_NAME', '$LINKNAME', $output1); 
    EOF 
    ) 

    echo "output is $output" 

ここで私の問題は、Oracleがschema1スキーマとlink1 dblinkを見つけることができないため、プロシージャをコンパイルできないことです。任意の提案をしてください?

+0

なぜこの手順を使用しますか? –

+0

正確に!貧しい私...通常のSQLクエリを使用して行うことができます:...)...ありがとう! – GSG

答えて

1

実際には、動的SQLを使用する必要があると考えるよりも、難しくなります。ちょうどあなたのシェル変数からプレーンなSQLのuilt使用:

output=$(
    $ORACLEHOME/bin/sqlplus -s $DBUSER/$DBPASSWORD <<EOF 
    set pages 0 feedback off 
    select count(*) from ${SCHEMA_NAME}[email protected]${LINKNAME} 
    where trunc(csactivated) > trunc(sysdate-1); 
EOF 
) 

を私は出力からノイズをトリミングするsetコマンドのカップルを追加しました。

また、テーブルの列を切り捨てる(インデックスの使用に影響します)必要があるかどうかわからないので、それを避けて、右側を調整して必要なデータを取得してください。

関連する問題