heredoc
コメントに記載されているように正しく見えませんが、単一の SQL*Plus コマンドを含むように見えます。次のいずれかで値を渡すことができますheredoc
。
sqlplus -S user/pass@localhost << EOF
@/opt/D2RQ/file.sql BUILDING
exit;
EOF
またはスクリプトにBUILDING
ある場合:$2
sqlplus -S user/pass@localhost << EOF
@/opt/D2RQ/file.sql $2
exit;
EOF
file.sql
最後にがあれば、exit
は必要ないのでさらに簡単になりますheredoc
:
sqlplus -S user/pass@localhost @/opt/D2RQ/file.sql $2
SQL では、置換変数を使用して位置パラメーターを参照できます。
...
}',SEM_Models('&1'),NULL,
...
は&1
、SQL スクリプトに渡される最初の値に置き換えられますBUILDING
。これは文字列であるため、引用符で囲む必要があります。set verify off
出力に置換が表示される場合は、停止することをお勧めします。
複数の値を渡し、シェル スクリプトの位置パラメータと同じように、それらを順番に参照できます。最初に渡されたパラメータは&1
、2 番目は&2
などです。SQL スクリプトのどこでも置換変数を使用できるため、それらを使用できます。問題のない列のエイリアスとして-リストの最後に追加する追加のパラメーターを慎重に追加する必要があります(スクリプトで番号付けが乱れる可能性があります)、またはすべてを一致するように調整します。
sqlplus -S user/pass@localhost << EOF
@/opt/D2RQ/file.sql total_count BUILDING
exit;
EOF
また:
sqlplus -S user/pass@localhost << EOF
@/opt/D2RQ/file.sql total_count $2
exit;
EOF
がシェルスクリプトに渡されている場合total_count
は、その位置パラメータなどを使用してください$4
。そして、あなたのSQLは次のようになります:
SELECT COUNT(*) as &1
FROM TABLE(SEM_MATCH(
'{
?s rdf:type :ProcessSpec .
?s ?p ?o
}',SEM_Models('&2'),NULL,
SEM_ALIASES(SEM_ALIAS('','http://VISION/DataSource/SEMANTIC_CACHE#')),NULL));
多くの値を渡す場合、位置パラメータを使用して名前付きパラメータを定義する方が明確な場合があります。そのため、順序付けの問題はすべてスクリプトの開始時に処理され、管理が容易になります。
define MY_ALIAS = &1
define MY_MODEL = &2
SELECT COUNT(*) as &MY_ALIAS
FROM TABLE(SEM_MATCH(
'{
?s rdf:type :ProcessSpec .
?s ?p ?o
}',SEM_Models('&MY_MODEL'),NULL,
SEM_ALIASES(SEM_ALIAS('','http://VISION/DataSource/SEMANTIC_CACHE#')),NULL));
あなたの別の質問から、おそらくあなたはただ欲しかった:
SELECT COUNT(*) as &1
FROM TABLE(SEM_MATCH(
'{
?s rdf:type :ProcessSpec .
?s ?p ?o
}',SEM_Models('&1'),NULL,
SEM_ALIASES(SEM_ALIAS('','http://VISION/DataSource/SEMANTIC_CACHE#')),NULL));
...したがって、エイリアスは、クエリしているのと同じ値になります( の値$2
、またはBUILDING
回答の元の部分の値)。置換変数は何度でも参照できます。
出力の各ビットのカウント値の上にヘッダーとして表示されるため、複数回実行している場合は使いにくいかもしれません。たぶん、これは後でより解析可能になるでしょう:
select '&1' as QUERIED_VALUE, COUNT(*) as TOTAL_COUNT
あなたset pages 0
との場合set heading off
、あなたの繰り返しの通話がきれいなリストに表示されることがあります。その列を常に同じ幅にするために、または類似のものをset tab off
使用する必要がある場合もあります。rpad('&1', 20)
または、次のように CSV として結果を取得します。
select '&1' ||','|| COUNT(*)
結果を何に使うかにもよりますが…