Pular para o conteúdo

Como Utilizar o Pacote DBMS_TRACE para Rastreamento de Procedures em Oracle SQL

Demonstração da Package DBMS_TRACE

Aqui estão dois exemplos de uso da PACKAGE DBMS TRACE:

Criação de um package de exemplo para uso na demonstração

Para esta demonstração, criei duas packages abaixo, cada um com duas procedures:

create or replace package pkas_test_dbms_trace_01 is 
    -- 
    /* Package Constants */ 
    gc_module_name constant varchar(30) := 'pkas_test_dbms_trace_01'; 
    -- 
    procedure procedure_01; 
    -- 
    procedure procedure_02; 
    -- 
end pkas_test_dbms_trace_01; 
/ 

show errors; -- 

create or replace package body pkas_test_dbms_trace_01 is 
    -- 
    procedure procedure_01 as 
        -- 
        x integer; 
        -- 
    begin 
        -- 
        dbms_output.put_line('begin'); 
        -- 
        select count(*) into x from tsas_parameters_lookup; 
        -- 
        if 3 > 2 then 
            -- 
            select count(*) into x from tsas_reports_role; 
            -- 
            if 5 > 1 then 
                -- 
                select count(*) into x from tsas_reports_parameter; 
                -- 
                if 6 > 10 then 
                    -- 
                    null; 
                    -- 
                else 
                    -- 
                    select count(*) into x from tsas_payment_calc_scripts; 
                    -- 
                    procedure_02(); 
                    -- 
                end if; 
                -- 
            end if; 
            -- 
        end if; 
        -- 
        dbms_output.put_line('end'); 
        -- 
    end procedure_01; 
    -- 
    procedure procedure_02 as 
        -- 
        x integer;         
        -- 
    begin 
        -- 
        select count(*) into x from taas_sis_notes; 
        -- 
        for x in 1..5 loop 
            -- 
            dbms_output.put_line('x'); 
            -- 
        end loop; 
        -- 
        select count(*) into x from tdas_applications_nitrates; 
        -- 
        pkas_test_dbms_trace_02.procedure_03(); 
        -- 
    end procedure_02; 
    --     
end pkas_test_dbms_trace_01; 
/ 

show errors; -- 

create or replace package pkas_test_dbms_trace_02 is 
    -- 
    /* Package Constants */ 
    gc_module_name constant varchar(30) := 'pkas_test_dbms_trace_02'; 
    --     
    procedure procedure_03; 
    -- 
    procedure procedure_04; 
    -- 
 
end pkas_test_dbms_trace_02; 
/ 

show errors; -- 

create or replace package body pkas_test_dbms_trace_02 is 
    -- 
    procedure procedure_03 as 
        -- 
        x integer; 
        -- 
    begin 
        -- 
        select count(*) into x from twas_acres_general_letter_data; 
        -- 
        if 1 > 10 then 
            -- 
            dbms_output.put_line('....'); 
            -- 
        else 
            -- 
            dbms_output.put_line('....'); 
            -- 
            if 8 > 2 then 
                -- 
                dbms_output.put_line('....'); 
                -- 
                if 88 > 55 then 
                    -- 
                    select count(*) into x from tdas_payment_claim_detail; 
                    -- 
                    dbms_output.put_line('....'); 
                    -- 
                    procedure_04(); 
                    -- 
                end if; 
                -- 
                select count(*) into x from tsas_jurisdiction; 
                -- 
            end if; 
            -- 
        end if; 
        -- 
    end procedure_03; 
    --     
    procedure procedure_04 as 
        -- 
        x integer; 
        -- 

    begin --         
        select count(*) into x from tsas_sap_unit_of_measure; -- 
        dbms_output.put_line('teste 01'); 
        dbms_output.put_line('teste 02'); 
        dbms_output.put_line('teste 03'); -- 
    end procedure_04;     -- 
end pkas_test_dbms_trace_02; 
Exemplo número 1

Com as packages criadas, vou executar o seguinte código:

image 46

Após a execução, vou rodar a seguinte consulta:

image 46

Resultado

Como você pode ver, em segundos, tenho um relatório de todas as linhas que foram EXECUTADAS na sequência em que foram EXECUTADAS. Essa é uma função extremamente poderosa para nós, programadores.

Exemplo número 02

Com as packages criadas, vou executar o seguinte código:

image 47

Após a execução, vou rodar a seguinte consulta:

image 47 1

Resultado

Como você pode ver, em segundos, tenho um relatório de todos os SQLs que foram EXECUTADOS na sequência em que foram EXECUTADOS.

Conclusão

Frequentemente, os programadores gastam horas tentando entender o caminho que um processo (packages, procedures, functions) percorre quando é executado, como mostrado principalmente no Exemplo número 01. Em segundos, obtemos um relatório linha a linha na ordem em que foram executadas. Essa é uma ferramenta muito útil para desenvolvedores, permitindo-nos ser mais eficientes e produtivos em nosso trabalho.

Ricardo Osorio

Ricardo Osorio

Ricardo Osorio é um profissional com mais de 15 anos de experiência em tecnologias Oracle, sendo a principal delas PL/SQL, Bacharel em Sistemas de Informação e MBA em Administração de banco de dados Oracle pela FIAP, é também um profissional certificado pela Oracle, trabalhou em grandes empresas no Brasil líderes no seu setor como JBS e Itaú e hoje mora na Irlanda e desenvolve sistemas para o governo irlandês. Ele é um entusiasta das tecnologias Oracle, gosta de compartilhar conhecimento e escrever sobre funcionalidades disponíveis na linguagem PL/SQL.

Comentário(s) da Comunidade

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

plugins premium WordPress