Alıntı:
Adlandırılması gerektiğini düşündüğüm şeyi temel alan uygun bir sütun bulmak için aşağıdaki ifadeyi kullanmayı denedim, ancak sonuç vermedi. *
SELECT * from dba_objects WHERE
object_name like '%DTN%'
Sütun bir nesne değildir. Sütun adının '% DTN%' gibi olmasını beklediğinizi kastediyorsanız, istediğiniz sorgu şudur:
SELECT owner, table_name, column_name FROM all_tab_columns WHERE column_name LIKE '%DTN%';
Ancak 'DTN' dizesi sizin açınızdan sadece bir tahmin ise, bu muhtemelen yardımcı olmayacaktır.
Bu arada, '1/22 / 2008P09RR8'in doğrudan tek bir sütundan seçilen bir değer olduğundan ne kadar eminsiniz? Nereden geldiğini hiç bilmiyorsanız, birkaç sütunun bir araya getirilmesi veya bazı işlevlerin sonucu veya iç içe geçmiş bir tablo nesnesinde bulunan bir değer olabilir. Bu nedenle, bu değer için her sütunu kontrol etmeye çalışan bir vahşi kaz kovalamacasında olabilirsiniz. Bu değeri görüntüleyen istemci uygulamasıyla başlayıp, onu elde etmek için hangi sorguyu kullandığını anlamaya çalışamaz mısınız?
Her neyse, diciu'nun cevabı, değer için her tablonun her sütununu kontrol etmek için SQL sorguları oluşturmanın bir yöntemini verir. Bir PL / SQL bloğu ve dinamik SQL kullanarak benzer şeyleri tamamen tek bir SQL oturumunda da yapabilirsiniz. İşte bunun için aceleyle yazılmış bazı kodlar:
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;
/
Bunu daha verimli hale getirmenin de bazı yolları var.
Bu durumda, aradığınız değer göz önüne alındığında, SAYI veya TARİH türündeki tüm sütunları net bir şekilde ortadan kaldırabilirsiniz, bu da sorgu sayısını azaltır. Hatta türünün '% CHAR%' gibi olduğu sütunlarla bile sınırlandırabilirsiniz.
Sütun başına bir sorgu yerine, tablo başına şu şekilde bir sorgu oluşturabilirsiniz:
SELECT * FROM table1
WHERE column1 = 'value'
OR column2 = 'value'
OR column3 = 'value'
...
;