Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Silverbolt

Select dinâmico

Recommended Posts

Olá a todos,

 

Espero q todos tenham tido um bom natal.

 

Galera,

 

Sou novato em oracle e to com um problema aki no seguinte.

 

Tenho akelas querys padrões para pegar as tabelas que contenham um determinado campo.

 

SELECT atc.*, ata.table_name name_tbl, ata.owner

FROM all_tab_columns atc, all_tables ata

WHERE atc.column_name = 'COD_TS_CONTRATO'

AND atc.owner IN ('TS', 'TS_HIST')

AND atc.table_name = ata.table_name

AND atc.owner = ata.owner

 

Queria agora fazer um outro select dinamico utilizando o resultado da query de cima para pegar o nome das tabelas.

 

Tipo: Select * from name_tbl where cod_ts_contrato = '1141'

 

Alguem tem alguma idéia???

 

Abs,

 

Luís Domingues

Compartilhar este post


Link para o post
Compartilhar em outros sites

Uma das formas de você fazer é utilizando concatenação, conforme abaixo:

 

SELECT 'SELECT * FROM '||TABLE_NAME||' WHERE COD_TS_CONTRATO = ''1141'';'

FROM DBA_TAB_COLUMNS

WHERE COLUMN_NAME ='NOME_DA_COLUNA'

AND OWNER = 'NOME_DO_OWNER';

 

Você pode colocar esse select em uma procedure ou um bloco anônimo e executar o resultado do cursor com execute immediate ou mostrar na tela com o dbms_output.put_line conforme abaixo:

 

DECLARE

cursor c1 is

SELECT 'SELECT * FROM '||TABLE_NAME||' WHERE COD_TS_CONTRATO = ''1141'';' col1

FROM DBA_TAB_COLUMNS

WHERE COLUMN_NAME ='NOME_DA_COLUNA'

AND OWNER = 'NOME_DO_OWNER';

BEGIN

for rec1 in c1 loop

dbms_output.put_line(rec1.col1);

end loop;

END;

 

 

[]s

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.