Preciso criar um pequeno programa que será alimentado com scripts SQL, cada script nada mais é que uma consulta em tabelas e/ou views. Tenho que pegar todos os objetos que estão contidos na consulta, um pequeno exemplo.
Precisaria retornar uma lista com os objetos que foram utilizados, no caso “CAPA,ITEM,IMPOSTO”. Alguém já fez algo do tipo ? ou teria uma dica para ajudar ?
Isso provavelmente tem de funcionar bem para um determinado banco de dados (digamos Oracle), certo?
I
icefox
Correto, os scripts são apenas para rodar em base Oracle.
E
entanglement
Tem um jeito bem bobo (se forem poucos os scripts SQL), que é o de você criar uma procedure com essa consulta, e então perguntar quais são os objetos de que essa consulta depende (tabelas, views etc.).
Mas pelo que imagino (você quer escrever um programa) você precisa consultar muitos scripts, certo?
I
icefox
Sim, terei que consultar vários scripts em vários períodos.
O programa vai ser um pouco mais complexo, após retirar os objetos do script preciso popular as tabelas que fazem parte dele, quando for uma view preciso verificar as tabelas que fazem parte dela também e popular.
A parte de popular as tabelas tendo os objetos em mão é tranquila, o que não tive ideia ainda é como fazer para extrair esses objetos da consulta. Após encontrar os objetos consigo ver suas dependências através de consulta no Oracle.
E
entanglement
Dá a impressão que, tendo uma lista de tabelas e views (você poderia obtê-la a partir do schema), você poderia usar algum parser SQL (acho que deve haver algum pronto ou quase pronto como exemplo do JavaCC ou do ANTLR) para você, reconhecendo a gramática do SQL Oracle, conseguir verificar se um determinado identificador é uma tabela ou view.
Mas talvez haja uma solução 100% Oracle para isso - infelizmente, eu procurei no Google sobre “dependent objects Oracle” e ele só me mostrou aquelas coisas óbvias, que você mesmo disse que é fácil obter.
I
icefox
É também não achei nada no google por isso postei aqui. Bom vamos ver se alguém já passou por isso, enquanto isso vou pesquisando e tentando montar um algoritmo aqui.
Se funcionar post aqui a solução.
R
Renato_Menezes_Viana
Boa Tarde,
Veja no link abaixo a procedure PL/SQL feita para encontrar OBJETOS SQL em um fonte JAVA.
Atente que a procedure WHO_JAVA_XREF procura em um “fonte”, logo seus scripts podem ser também pesquisados.