उद्धरण:
मैंने इस कथन का उपयोग करने की कोशिश की है कि मुझे जो नाम दिया जाना चाहिए, उसके आधार पर एक उपयुक्त कॉलम मिल जाए लेकिन इसका कोई परिणाम नहीं निकला। *
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%';
लेकिन अगर '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'
...
;