Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

शेल स्क्रिप्ट से sqlplus में वैरिएबल कैसे पास करें?

ऐसा प्रतीत होता है कि आपके पास heredoc है जिसमें एक एकल SQL*Plus कमांड है, हालांकि यह ठीक नहीं दिखता जैसा कि टिप्पणियों में बताया गया है। आप या तो heredoc . में कोई मान पास कर सकते हैं :

sqlplus -S user/[email protected] << EOF
@/opt/D2RQ/file.sql BUILDING
exit;
EOF

या अगर BUILDING $2 है आपकी स्क्रिप्ट में:

sqlplus -S user/[email protected] << EOF
@/opt/D2RQ/file.sql $2
exit;
EOF

अगर आपका file.sql एक exit था अंत में तो यह और भी आसान हो जाएगा क्योंकि आपको heredoc . की आवश्यकता नहीं होगी :

sqlplus -S user/[email protected] @/opt/D2RQ/file.sql $2

अपने SQL में तब आप प्रतिस्थापन चरों का उपयोग करके स्थिति मापदंडों का उल्लेख कर सकते हैं:

...
}',SEM_Models('&1'),NULL,
...

&1 SQL स्क्रिप्ट को दिए गए पहले मान से बदल दिया जाएगा, BUILDING; क्योंकि यह एक स्ट्रिंग है जिसे अभी भी उद्धरणों में संलग्न करने की आवश्यकता है। हो सकता है कि आप set verify off अगर आपको आउटपुट में प्रतिस्थापन दिखा रहा है तो रोकने के लिए।

आप कई मानों को पास कर सकते हैं, और उन्हें क्रमिक रूप से संदर्भित कर सकते हैं जैसे आप शेल स्क्रिप्ट में स्थितीय मापदंडों को करेंगे - पहला पारित पैरामीटर &1 है , दूसरा है &2 , आदि। आप SQL स्क्रिप्ट में कहीं भी प्रतिस्थापन चर का उपयोग कर सकते हैं, इसलिए उन्हें बिना किसी समस्या के कॉलम उपनाम के रूप में उपयोग किया जा सकता है - आपको बस एक अतिरिक्त पैरामीटर जोड़ने में सावधानी बरतनी होगी जिसे आप या तो सूची के अंत में जोड़ते हैं (जो बनाता है स्क्रिप्ट में क्रम से बाहर क्रमांकन, संभावित रूप से) या मिलान करने के लिए सब कुछ समायोजित करें:

sqlplus -S user/[email protected] << EOF
@/opt/D2RQ/file.sql total_count BUILDING
exit;
EOF

या:

sqlplus -S user/[email protected] << 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) . का उपयोग करें या उस कॉलम को हमेशा समान चौड़ाई बनाने के समान। या सीएसवी के रूप में परिणाम प्राप्त करें:

select '&1' ||','|| COUNT(*)

निर्भर करता है कि आप किसके लिए परिणामों का उपयोग कर रहे हैं...




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. R12.2 पर्यावरण को कैसे क्लोन करें

  2. ऑरैकल टेबल या दृश्य अंदर संग्रहीत प्रक्रिया से मौजूद नहीं है

  3. कैसे जांचें कि DataReader मान शून्य नहीं है?

  4. Oracle में किसी दिनांक को फ़ॉर्मेट करते समय वर्ष की वर्तनी कैसे करें

  5. किसी अन्य कॉलम द्वारा समूहीकृत किसी भिन्न स्तंभ के अधिकतम के आधार पर मान प्राप्त करें