Citar:
Tentei usar a instrução abaixo para encontrar uma coluna apropriada com base no que acho que deveria ser nomeada, mas não retornou resultados. *
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 uma suposição de sua parte, isso provavelmente não ajudará.
A propósito, como você tem certeza de que '1/22 / 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 situado em um objeto de tabela aninhado. Portanto, você pode estar em uma perseguição de ganso selvagem tentando verificar cada coluna 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 em cada coluna de cada tabela. 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ê está procurando, você pode eliminar claramente qualquer coluna do tipo NÚMERO ou DATA, o que reduziria o número de consultas. Talvez até restrinja 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'
...
;