Citar:
Eu tentei usar esta declaração abaixo para encontrar uma coluna apropriada com base no que eu acho que deveria ser nomeado, mas não retornou nenhum resultado.*
SELECT * from dba_objects WHERE object_name like '%DTN%'
Uma coluna não é um objeto. Se você quer dizer que espera que o nome da coluna seja como '%DTN%', a consulta desejada é:
SELECT owner, table_name, column_name FROM all_tab_columns WHERE column_name LIKE '%DTN%';
Mas se a string 'DTN' for apenas um palpite de sua parte, isso provavelmente não ajudará.
A propósito, você tem certeza de que '22/1/2008P09RR8' é um valor selecionado diretamente de uma única coluna? Se você não sabe de onde vem, pode ser uma concatenação de várias colunas, ou o resultado de alguma função, ou um valor localizado em um objeto de tabela aninhado. Portanto, você pode estar em uma caça ao ganso selvagem tentando verificar todas as colunas para esse valor. Você não pode começar com qualquer aplicativo cliente que esteja exibindo esse valor e tentar descobrir qual consulta ele está usando para obtê-lo?
De qualquer forma, a resposta de diciu fornece um método de geração de consultas SQL para verificar o valor de todas as colunas de todas as tabelas. Você também pode fazer coisas semelhantes inteiramente em uma sessão SQL usando um bloco PL/SQL e SQL dinâmico. Aqui está um código escrito às pressas para isso:
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;
/
Existem algumas maneiras de torná-lo mais eficiente também.
Nesse caso, dado o valor que você procura, você pode eliminar claramente qualquer coluna que seja do tipo NUMBER ou DATE, o que reduziria o número de consultas. Talvez até restringi-lo a colunas onde o tipo é como '%CHAR%'.
Em vez de uma consulta por coluna, você pode criar uma consulta por tabela assim:
SELECT * FROM table1
WHERE column1 = 'value'
OR column2 = 'value'
OR column3 = 'value'
...
;