Eu programo, administro e dou suporte a um aplicativo ERP. Uma das minhas tarefas mais comuns é entender de onde os dados se originam, encontrando o link entre um determinado campo de relatório e seu campo de entrada de dados no aplicativo. Para fazer isso, tenho que examinar manualmente o DDL SQL de uma ou mais visualizações para entender as colunas da tabela, a fim de corresponder as colunas da tabela de uma visualização com as colunas da tabela de outra visualização. Esta tarefa manual pode exigir o exame de quatro ou cinco camadas de abstração.
Existe uma maneira mais rápida de examinar os metadados para descobrir como uma coluna de exibição é calculada a partir de sua coluna da tabela base? Existe uma maneira de examinar o plano de execução do Oracle para ver a consulta reescrita, ignorando a inspeção manual das exibições intermediárias?
Começando com 12c, temos DBMS_UTILITY.EXPAND_SQL_TEXT .
Você basicamente passa o texto da consulta pelo primeiro parâmetro de entrada e recebe a consulta reescrita de volta pelo segundo parâmetro de saída.
Mas como você está no 11.2, ainda não pode usar isso. No entanto, você pode coletar o rastreamento do otimizador. Se você já executou sua consulta e possui o sql_id dela:
Ou se você não conhece o sql_id e não executou a query antes:
Isso gerará um arquivo de rastreamento que você pode ler e localizar a consulta final reescrita nele.
Para ser honesto, a saída produzida por todos os métodos pode ser difícil de ler quando você tem algumas consultas complexas, e a maneira de obtê-las não é tão trivial, então geralmente acabo lendo e "analisando" as instruções DDL manualmente ...
Você tem acesso ao plano de execução ? Isso mostrará como o Oracle resolve colunas de visualização para índices ou tabelas base. Você pode criar consultas fictícias simples para se concentrar nos itens específicos nos quais está interessado.
Três anos depois, a base instalada de instâncias 11g provavelmente mudou para 12c, assim como nós.
OUT
os parâmetros não têm a mesma conveniência que as funções, mas aWITH
cláusula em 12c agora aceita funções PL/SQL definidas pelo usuário.