Pular para o conteúdo
Visualizando 7 posts - 1 até 7 (de 7 do total)
  • Autor
    Posts
  • #108988
    Avatar de airoospairoosp
    Participante

      Bom dia pessoal,

      Preciso de uma ajuda. Me pediram um levantamento do total de linhas dos objetos do banco, neste caso seria o total de linhas de procedures, functions, packages, views, database link, synonym.

      Aqui temos procedures isoladas e procedures dentro de packages, se alguém tiver alguma dica, agradeço.

      Obrigado.

      Airton

      #108990
      Avatar de C-S-RC-S-R
      Participante

        Airton não entendi sua pergunta.

        Vc quer o numero de linhas da sua procedure?

        #108991
        Avatar de airoospairoosp
        Participante

          Sim, o número de linhas de código das procedures, functions, views, triggers, etc.

          O detalhe são as procedures e function que estão dentro das packages.

          #108992
          Avatar de MottaMotta
          Participante

            Muito “grosso modo” , linhas de um owner

            SELECT TYPE,COUNT(LINE) LINHAS
            FROM USER_SOURCE
            GROUP BY TYPE

            as views e trigger* não entram nesta bagaça pois não tem “linhas” , todavia os codigos estão nas views USER_TRIGGERS e USER_VIEWS

            • não tenho certeza se funciona sempre
            #108994
            Avatar de José Laurindo ChiappaJosé Laurindo Chiappa
            Moderador

              Pingos nos Is : fique CLARO que ** database links ** e ** synonyms ** NÂO POSSUEM CÓDIGO DENTRE DELES, então absolutamente Não Faz Sentido “total de linhas de código” pra Objetos Não-Programáticos como eles…
              Já para Procedures, Functions e Packages é simples : CADA linha de Código desses objetos é um registro na DBA_SOURCE, então seria simplesmente um :

              SELECT OWNER, TYPE, NAME, COUNT(*) FROM DBA_SOURCE WHERE OWNER in (‘listadeownersapesquisar’) GROUP BY OWNER, TYPE, NAME ORDER BY 1,2,3;

              Apenas as VIEWs (que são objetos programáticos diferentes) a coisa muda : o código SQL que compõe a view não é compilado, então esse Não Vai estar contido na DBA_SOURCE, não tem ‘fonte’ nem ‘compilado’ a armazenar…
              O código SQL que compõe cada view fica na DBA_VIEWS numa única coluna LONG chamada TEXT : como não há uma built-in que leia o texto dentro de um LONG linha-a-linha (pra vc poder as contar), o que eu faria seria CONVERTER o LONG para LOB (CLOB, já que um LONG contém strings longas), aí sim temos diversas built-ins que aceitam LOBs…. Um exemplo, digamos que quero obter o texto e a quantidade de linhas das views que pertencem aos schemas HR ou SH :

              SQL> create table T_VIEWS as (select owner, view_name, text_length, TO_LOB(text) TEXTO_EM_LOB from dba_views where owner in (‘HR’, ‘SH’) );

              Tabela criada.

              SQL> desc T_VIEWS
              Nome Nulo? Tipo


              OWNER NOT NULL VARCHAR2(30)
              VIEW_NAME NOT NULL VARCHAR2(30)
              TEXT_LENGTH NUMBER
              TEXTO_EM_LOB CLOB

              ==> Agora que tenho o texto SQL das views num LOB, temos Diversas built-ins e métodos disponíveis… Um método possível (já que sabemos que as linhas de um texto normalmente terminam com o caracter ASCII 10, que é o newline) é obter uma outra string sem os CHR(10) – é o que o REPLACE faz – e depois vermos a diferença do comprimento original menos o comprimento da segunda string sem os fins-de-linha, isso nos dá a qtdade de caracteres de fim de linha que foram removidos E PORTANTO a qtdade de linhas…. Ficaria assim :

              SQL> set long 500000 lines 133 pages 50000 trimspool on
              SQL> select owner, view_name, text_length, TEXTO_EM_LOB, (LENGTH(TEXTO_EM_LOB) – LENGTH(replace(TEXTO_EM_LOB,chr(10)))) QTD_LINHAS from t_VIEWS;

              OWNER VIEW_NAME TEXT_LENGTH TEXTO_EM_LOB LINHAS


              HR EMP_DETAILS_VIEW 538 SELECT 29
              e.employee_id,
              e.job_id,
              e.manager_id,
              e.department_id,
              d.location_id,
              l.country_id,
              e.first_name,
              e.last_name,
              e.salary,
              e.commission_pct,
              d.department_name,
              j.job_title,
              l.city,
              l.state_province,
              c.country_name,
              r.region_name
              FROM
              employees e,
              departments d,
              jobs j,
              locations l,
              countries c,
              regions r
              WHERE e.department_id = d.department_id
              AND d.location_id = l.location_id
              AND l.country_id = c.country_id
              AND c.region_id = r.region_id
              AND j.job_id = e.job_id
              WITH READ ONLY

              SH PROFITS 394 SELECT 15
              s.channel_id,
              s.cust_id,
              s.prod_id,
              s.promo_id,
              s.time_id,
              c.unit_cost,
              c.unit_price,
              s.amount_sold,
              s.quantity_sold,
              c.unit_cost * s.quantity_sold TOTAL_COST
              FROM costs c, sales s
              WHERE c.prod_id = s.prod_id
              AND c.time_id = s.time_id
              AND c.channel_id = s.channel_id
              AND c.promo_id = s.promo_id

              SQL>

              Blz ??

              []s

              Chiappa

              OBS : reforço NOVAMENTE, esse é apenas UM dos meios possíveis….

              #108995
              Avatar de José Laurindo ChiappaJosé Laurindo Chiappa
              Moderador

                Paulo, só uma obs : realmente VIEWS não entram na USER/ALL/DBA_SOURCE mas triggers *** ENTRAM SIM ***, pois elas são compiladas e portanto possuem SIM código fonte E código compilado armazenado no dicionário de dados :

                SQL> select distinct type from dba_source;

                TYPE

                PROCEDURE
                PACKAGE
                PACKAGE BODY
                LIBRARY
                TYPE BODY
                TRIGGER
                FUNCTION
                JAVA SOURCE
                TYPE

                9 linhas selecionadas.

                SQL>

                Só não lembro se as triggers passaram a ser compiladas no 8i ou no 9i, mas de qquer maneira já faz MUUUITO TEMPO que isso ocorre…

                #108996
                Avatar de MottaMotta
                Participante

                  Beleza , não tinha certeza quanto a trigger se todas iam para o “code” , a view eu tinha certeza pois já tive problemas para achar “códigos” na view.

                  E dba_source é logicamente mais completa que user_source.

                Visualizando 7 posts - 1 até 7 (de 7 do total)
                • Você deve fazer login para responder a este tópico.
                plugins premium WordPress