Obter informações – total de linhas dos objetos

Home Fóruns Banco Oracle Obter informações – total de linhas dos objetos

Visualizando 7 posts - 1 até 7 (de 7 do total)
  • Autor
    Posts
  • #108988
    airoosp
    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
    C-S-R
    Participante

    Airton não entendi sua pergunta.

    Vc quer o numero de linhas da sua procedure?

    #108991
    airoosp
    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
    Motta
    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

    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

    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
    Motta
    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.
Ads Blocker Image Powered by Code Help Pro

Ads Blocker Detectado !

Verificamos que está usando alguma extensão para bloquear os anúncios. O GPO (Grupo de Profissionais Oracle) obtém a sua renda através dos anúncios, para assim manter toda a estrutura dedicada a universalização do conhecimento.

Se você gosta de nosso trabalho, pedimos por gentileza que desabilite o ads blocker. Trabalhamos somente com o Google Adsense e tentamos ao máximo exibir apenas o necessário.

Agradecemos de antemão ! :)

Powered By
Best Wordpress Adblock Detecting Plugin | CHP Adblock