ऐसा प्रतीत होता है कि आपके पास heredoc है जिसमें एक एकल SQL*Plus कमांड है, हालांकि यह ठीक नहीं दिखता जैसा कि टिप्पणियों में बताया गया है। आप या तो heredoc . में कोई मान पास कर सकते हैं :
sqlplus -S user/example@sqldat.com << EOF
@/opt/D2RQ/file.sql BUILDING
exit;
EOF
या अगर BUILDING $2 है आपकी स्क्रिप्ट में:
sqlplus -S user/example@sqldat.com << EOF
@/opt/D2RQ/file.sql $2
exit;
EOF
अगर आपका file.sql एक exit था अंत में तो यह और भी आसान हो जाएगा क्योंकि आपको heredoc . की आवश्यकता नहीं होगी :
sqlplus -S user/example@sqldat.com @/opt/D2RQ/file.sql $2
अपने SQL में तब आप प्रतिस्थापन चरों का उपयोग करके स्थिति मापदंडों का उल्लेख कर सकते हैं:
...
}',SEM_Models('&1'),NULL,
...
&1 SQL स्क्रिप्ट को दिए गए पहले मान से बदल दिया जाएगा, BUILDING; क्योंकि यह एक स्ट्रिंग है जिसे अभी भी उद्धरणों में संलग्न करने की आवश्यकता है। हो सकता है कि आप set verify off अगर आपको आउटपुट में प्रतिस्थापन दिखा रहा है तो रोकने के लिए।
आप कई मानों को पास कर सकते हैं, और उन्हें क्रमिक रूप से संदर्भित कर सकते हैं जैसे आप शेल स्क्रिप्ट में स्थितीय मापदंडों को करेंगे - पहला पारित पैरामीटर &1 है , दूसरा है &2 , आदि। आप SQL स्क्रिप्ट में कहीं भी प्रतिस्थापन चर का उपयोग कर सकते हैं, इसलिए उन्हें बिना किसी समस्या के कॉलम उपनाम के रूप में उपयोग किया जा सकता है - आपको बस एक अतिरिक्त पैरामीटर जोड़ने में सावधानी बरतनी होगी जिसे आप या तो सूची के अंत में जोड़ते हैं (जो बनाता है स्क्रिप्ट में क्रम से बाहर क्रमांकन, संभावित रूप से) या मिलान करने के लिए सब कुछ समायोजित करें:
sqlplus -S user/example@sqldat.com << EOF
@/opt/D2RQ/file.sql total_count BUILDING
exit;
EOF
या:
sqlplus -S user/example@sqldat.com << 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('','https://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('','https://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('','https://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) . का उपयोग करें या उस कॉलम को हमेशा समान चौड़ाई बनाने के समान। या सीएसवी के रूप में परिणाम प्राप्त करें:
select '&1' ||','|| COUNT(*)
निर्भर करता है कि आप किसके लिए परिणामों का उपयोग कर रहे हैं...