Tenho um sistema com 640 tabelas.
Quero encontrar a tabela que tenha os tipos de venda cadastradas:
ex: bonificação, brinde...
Quero saber os nomes das tabelas que tenha essas informações gravadas.
Achar tabelas que tenha a informação desejada
-
- Rank: Estagiário Júnior
- Mensagens: 2
- Registrado em: Qui, 26 Nov 2009 3:01 pm
- Localização: valença - rio de janeiro
-
- Moderador
- Mensagens: 1177
- Registrado em: Qui, 15 Out 2009 10:28 am
- Localização: Recife
teria que fazer um loop na user_tab_columns e sair montando consultas dinamicas com execute immediate.
- fsitja
- Rank: OraSauro
- Mensagens: 611
- Registrado em: Seg, 19 Jan 2009 4:29 pm
- Localização: Gaúcho no Rio de Janeiro - RJ
"The scars exist to remind us that the past was real"
Campanha: Como fazer uma pergunta e obter uma resposta.
http://tkyte.blogspot.com/2005/06/how-t ... tions.html
OCA & OCP Developer — OCE SQL Expert — OCS Data Warehousing Specialist
Campanha: Como fazer uma pergunta e obter uma resposta.
http://tkyte.blogspot.com/2005/06/how-t ... tions.html
OCA & OCP Developer — OCE SQL Expert — OCS Data Warehousing Specialist
Eu recomendaria um bom e velho diagrama ER. Chama o AD para um papo.
Se isso não for possível você vai suar a camisa e ainda assim pode não achar algo. Se suas tabelas tiverem comentários nas colunas fica mais simples... mas vai ter que testar... pode contar abreviatura das palavras, pode ter sido escrito errado, pode ter acento, cedilha, etc... Eu usaria expressões regulares para facilitar isso.
No exemplo abaixo estou buscando pelas palavras YES, MAXIMUM e NAME no comentário da coluna e nos nomes das colunas em si.
Se isso não for possível você vai suar a camisa e ainda assim pode não achar algo. Se suas tabelas tiverem comentários nas colunas fica mais simples... mas vai ter que testar... pode contar abreviatura das palavras, pode ter sido escrito errado, pode ter acento, cedilha, etc... Eu usaria expressões regulares para facilitar isso.
No exemplo abaixo estou buscando pelas palavras YES, MAXIMUM e NAME no comentário da coluna e nos nomes das colunas em si.
select tc.owner, tc.table_name, tc.column_name, cc.comments, tc.column_name || ' - ' || cc.comments name_comment
from all_tab_cols tc
left join all_col_comments cc on tc.owner = cc.owner
and tc.table_name = cc.table_name
and tc.column_name = cc.column_name
where regexp_instr(upper(tc.column_name || ' - ' || cc.comments), '.YES.') > 0
or regexp_instr(upper(tc.column_name || ' - ' || cc.comments), '.MAXIMUM.') > 0
or regexp_instr(upper(tc.column_name || ' - ' || cc.comments), '.NAME.') > 0
-
- Moderador
- Mensagens: 1396
- Registrado em: Sex, 01 Fev 2008 2:06 pm
- Localização: Rio de Janeiro - RJ
- Contato:

você tem q ter mais alguma informacao?
quando preciso de um objeto no banco e tenho/sei muito pouco sobre este objeto eu faco isso:
quando preciso de um objeto no banco e tenho/sei muito pouco sobre este objeto eu faco isso:
select * from all_source where text like '%tenho_isso%'
-
- Rank: Estagiário Júnior
- Mensagens: 2
- Registrado em: Qui, 26 Nov 2009 3:01 pm
- Localização: valença - rio de janeiro
O QUE PRECISO É MAIS OU MENOS ISSO:
tenho a seguinte linha de comando:
Essa linha me diz todas as tabelas que tenha a coluna chamada "senha"...
Preciso de algo parecido que me diga quais colunas de quais tabelas tenha uma determinada informação gravada.
ex: quando bloqueio o cliente, tenho de dar o motivo do bloquei (ex: cliente inativo). Quero saber qual tabela tem esse texto armazenado dentro de sí.
tenho a seguinte linha de comando:
SELECT *
FROM all_tab_columns
WHERE upper(column_name) LIKE 'SENHA';
Preciso de algo parecido que me diga quais colunas de quais tabelas tenha uma determinada informação gravada.
ex: quando bloqueio o cliente, tenho de dar o motivo do bloquei (ex: cliente inativo). Quero saber qual tabela tem esse texto armazenado dentro de sí.
Mas existe um nome fixo pra coluna aonde buscar a informação? Ou pode ser coluna de qualquer nome?
Montei um pequeno procedimento, mas pelo tamanho da sua base e dependendo de indices, tipos da coluna etc, esse procedimento pode demorar pra terminar de rodar.
Ele busca por colunas de qualquer nome, você só precisa informar os possíveis tipos pra coluna e os owners no select do "FOR" e também informa a sentença buscada na vatriável "string" localizada logo após o begin. Lembrando que quanto mais restrições melhor o desempenho!
Montei um pequeno procedimento, mas pelo tamanho da sua base e dependendo de indices, tipos da coluna etc, esse procedimento pode demorar pra terminar de rodar.
Ele busca por colunas de qualquer nome, você só precisa informar os possíveis tipos pra coluna e os owners no select do "FOR" e também informa a sentença buscada na vatriável "string" localizada logo após o begin. Lembrando que quanto mais restrições melhor o desempenho!
declare
verifica varchar2(4000);
string varchar2(4000);
begin
string := upper('KING');
for i in (select owner, table_name, column_name
from all_tab_columns
where data_type in ('VARCHAR2','CHAR','VARCHAR','NCHAR','NVARCHAR2')
and owner in ('HR','SCOTT'))
loop
verifica := null;
begin
execute immediate 'select substr(' || i.column_name || ',1,4000) from ' || i.owner || '.' || i.table_name || ' where upper(' || i.column_name || ') like ''%' || string || '%'' and rownum = 1' into verifica;
exception
when no_data_found then
null;
end;
if (verifica is not null) then
dbms_output.put_line('OWNER: ' || i.owner || CHR(10) || ' - TABELA: ' || i.table_name || CHR(10) || ' - COLUNA: ' || i.column_name || CHR(10));
end if;
end loop;
end;
/
-
- Informação
-
Quem está online
Usuários navegando neste fórum: Nenhum usuário registrado e 5 visitantes