उद्धरण:
<ब्लॉकक्वॉट>मैंने नीचे दिए गए इस कथन का उपयोग करके एक उपयुक्त कॉलम खोजने की कोशिश की है जो मुझे लगता है कि इसे नाम दिया जाना चाहिए, लेकिन इसका कोई परिणाम नहीं निकला।*
SELECT * from dba_objects WHERE
object_name like '%DTN%'
एक कॉलम एक वस्तु नहीं है। यदि आपका मतलब है कि आप कॉलम नाम '%DTN%' की तरह होने की उम्मीद करते हैं, तो आप जो क्वेरी चाहते हैं वह है:
SELECT owner, table_name, column_name FROM all_tab_columns WHERE column_name LIKE '%DTN%';
लेकिन अगर 'डीटीएन' स्ट्रिंग आपकी ओर से सिर्फ एक अनुमान है, तो शायद इससे कोई फायदा नहीं होगा।
वैसे, आप कितने निश्चित हैं कि '1/22/2008P09RR8' एक कॉलम से सीधे चुना गया मान है? यदि आप बिल्कुल नहीं जानते हैं कि यह कहां से आ रहा है, तो यह कई स्तंभों का संयोजन हो सकता है, या किसी फ़ंक्शन का परिणाम हो सकता है, या नेस्टेड टेबल ऑब्जेक्ट में बैठा मान हो सकता है। तो आप उस मूल्य के लिए प्रत्येक कॉलम की जांच करने की कोशिश कर रहे जंगली हंस का पीछा कर सकते हैं। क्या आप इस मूल्य को प्रदर्शित करने वाले किसी भी क्लाइंट एप्लिकेशन से शुरू नहीं कर सकते हैं और यह पता लगाने की कोशिश कर सकते हैं कि इसे प्राप्त करने के लिए यह किस क्वेरी का उपयोग कर रहा है?
वैसे भी, diciu का उत्तर मान के लिए प्रत्येक तालिका के प्रत्येक कॉलम को जांचने के लिए SQL क्वेरी उत्पन्न करने का एक तरीका देता है। आप पीएल/एसक्यूएल ब्लॉक और डायनेमिक एसक्यूएल का उपयोग करके पूरी तरह से एक एसक्यूएल सत्र में समान सामान भी कर सकते हैं। उसके लिए जल्दबाजी में लिखा गया कुछ कोड यहां दिया गया है:
SET SERVEROUTPUT ON SIZE 100000
DECLARE
match_count INTEGER;
BEGIN
FOR t IN (SELECT owner, table_name, column_name
FROM all_tab_columns
WHERE owner <> 'SYS' and data_type LIKE '%CHAR%') LOOP
EXECUTE IMMEDIATE
'SELECT COUNT(*) FROM ' || t.owner || '.' || t.table_name ||
' WHERE '||t.column_name||' = :1'
INTO match_count
USING '1/22/2008P09RR8';
IF match_count > 0 THEN
dbms_output.put_line( t.table_name ||' '||t.column_name||' '||match_count );
END IF;
END LOOP;
END;
/
कुछ तरीके हैं जिनसे आप इसे और अधिक कुशल भी बना सकते हैं।
इस मामले में, आप जिस मान की तलाश कर रहे हैं, आप NUMBER या DATE प्रकार के किसी भी कॉलम को स्पष्ट रूप से समाप्त कर सकते हैं, जिससे प्रश्नों की संख्या कम हो जाएगी। शायद इसे उन स्तंभों तक भी सीमित कर दें जहां प्रकार '%CHAR%' जैसा है।
प्रति कॉलम एक क्वेरी के बजाय, आप प्रति टेबल एक क्वेरी इस तरह बना सकते हैं:
SELECT * FROM table1
WHERE column1 = 'value'
OR column2 = 'value'
OR column3 = 'value'
...
;