Pegar Cada Fonte Identificado no Package Body

Dúvidas, dicas e truques de PL/SQL. Aqui também vão assuntos relacionados a pacotes, triggers, funções, Java-Stored Procedures, etc
Responder
Renato Menezes Viana
Rank: Analista Pleno
Rank: Analista Pleno
Mensagens: 128
Registrado em: Sáb, 18 Nov 2006 11:51 am
Localização: Rio de Janeiro - RJ

Pessoal:

Em um determinado package estão diversos fontes de procedures e functions e com o comando abaixo (select) podemos ver o problema: COMO PEGAR CADA FONTE IDENTIFICANDO CORRETAMENTE seu início e fim de forma a gravar arquivos separados?

No trecho abaixo podemos notar que existem declarações e descrição help no TYPE = 'PACKAGE' que pode ser desprezada mantendo apenas TYPE = 'PACKAGE BODY' e teríamos apenas dois arquivos correspondendo a identificação:

usuario1.pck_func_prov.acerta_prov.prc (line 66 até 110)
usuario1.pck_func.prov.verifica_apos_vac_prov.prc (line 30 até 65)


Selecionar tudo

select * from all_source where NAME like '%FUNC%' OR NAME like '%PROV%' order by owner, name, type, line;

OWNER	 NAME	                TYPE	             LINE    TEXT
-----	        ----		                ----	             ----	----
USUARIO1 PCK_FUNC_PROV	PACKAGE	        1	PACKAGE         "PCK_FUNC_PROV" IS

USUARIO1 PCK_FUNC_PROV	PACKAGE		2	/**************** INICIO_HELP: ****************

USUARIO1 PCK_FUNC_PROV	PACKAGE		3	----------------------------------------------------
USUARIO1 PCK_FUNC_PROV	PACKAGE		4	Nome:

USUARIO1 PCK_FUNC_PROV	PACKAGE		5	  PROCEDURE ACERTA_DESLOC
USUARIO1 PCK_FUNC_PROV	PACKAGE		6	Proposito:

USUARIO1 PCK_FUNC_PROV	PACKAGE		7	  Esta procedure tem por finalidade acertar 
USUARIO1 PCK_FUNC_PROV	PACKAGE		8	  parametros informados. Suas funcoes principais são :
USUARIO1 PCK_FUNC_PROV	PACKAGE		9	 ....
USUARIO1 PCK_FUNC_PROV	PACKAGE		10	Nome:
USUARIO1 PCK_FUNC_PROV	PACKAGE		11	  PROCEDURE VERIFICA_APOS_VAC_PROV

USUARIO1 PCK_FUNC_PROV	PACKAGE		12	Proposito:

USUARIO1 PCK_FUNC_PROV	PACKAGE		13	  Esta procedure tem por finalidade realizar as consistencias relacionadas:
USUARIO1 PCK_FUNC_PROV	PACKAGE		14	 ....
USUARIO1 PCK_FUNC_PROV	PACKAGE		15	 ....
USUARIO1 PCK_FUNC_PROV	PACKAGE		16	----------------------------------------------------
USUARIO1 PCK_FUNC_PROV	PACKAGE		17	***************** FINAL_HELP: ****************/

USUARIO1 PCK_FUNC_PROV	PACKAGE		18	  --

USUARIO1 PCK_FUNC_PROV	PACKAGE		19	  v_ep            BOOLEAN;

USUARIO1 PCK_FUNC_PROV	PACKAGE		20	  v_mens          VARCHAR2(2000);

USUARIO1 PCK_FUNC_PROV	PACKAGE		21	  --

USUARIO1 PCK_FUNC_PROV	PACKAGE		22	  --
USUARIO1 PCK_FUNC_PROV	PACKAGE		23	  --
USUARIO1 PCK_FUNC_PROV	PACKAGE		24	  PROCEDURE ACERTA_DESLOC ( P_NUMFUNC IN EVENTO_FUNC.numfunc%TYPE,
USUARIO1 PCK_FUNC_PROV	PACKAGE		25	                            P_NUMVINC IN EVENTO_FUNC.numvinc%TYPE,
USUARIO1 PCK_FUNC_PROV	PACKAGE		26	                            P_TIPOEVENTO IN EVENTO_FUNC.tipoevento%TYPE,
USUARIO1 PCK_FUNC_PROV	PACKAGE		27	                            P_DATA    IN DATE);

USUARIO1 PCK_FUNC_PROV	PACKAGE		28	  --

USUARIO1 PCK_FUNC_PROV	PACKAGE		29	  PROCEDURE VERIFICA_APOS_VAC_PROV ( P_AUX IN EVENTO_FUNC%ROWTYPE );

USUARIO1 PCK_FUNC_PROV	PACKAGE BODY	30	  PROCEDURE VERIFICA_APOS_VAC_PROV ( P_AUX IN EVENTO_FUNC%ROWTYPE ) IS

USUARIO1 PCK_FUNC_PROV	PACKAGE BODY	31	    v_dtaproxim   DATE;

USUARIO1 PCK_FUNC_PROV	PACKAGE BODY	32	    v_dtvac       DATE;

USUARIO1 PCK_FUNC_PROV	PACKAGE BODY	33	  BEGIN

USUARIO1 PCK_FUNC_PROV	PACKAGE BODY	34	    --

USUARIO1 PCK_FUNC_PROV	PACKAGE BODY	35	    SELECT dtvac, dtaproxim
USUARIO1 PCK_FUNC_PROV	PACKAGE BODY	36	      INTO v_dtvac, v_dtaproxim

USUARIO1 PCK_FUNC_PROV	PACKAGE BODY	37	      FROM circulos

USUARIO1 PCK_FUNC_PROV	PACKAGE BODY	38	     WHERE numfunc = P_AUX.numfunc

USUARIO1 PCK_FUNC_PROV	PACKAGE BODY	39	       AND numero = P_AUX.numvinc;

USUARIO1 PCK_FUNC_PROV	PACKAGE BODY	40	    --

USUARIO1 PCK_FUNC_PROV	PACKAGE BODY	41	    IF (v_dtaproxim IS NOT NULL) THEN

USUARIO1 PCK_FUNC_PROV	PACKAGE BODY	42	      IF ( (P_AUX.dtini < v_dtaproxim) AND (P_AUX.dtfim > v_dtaproxim) ) THEN

USUARIO1 PCK_FUNC_PROV	PACKAGE BODY	43	        GERAL_ERRO_PACK.TRATA_ERRO ( 103,

USUARIO1 PCK_FUNC_PROV	PACKAGE BODY	44	                                       TO_CHAR(P_AUX.dtini, 'DD/MM/YYYY'),

USUARIO1 PCK_FUNC_PROV	PACKAGE BODY	45	                                       TO_CHAR(P_AUX.dtfim, 'DD/MM/YYYY'),

USUARIO1 PCK_FUNC_PROV	PACKAGE BODY	46	                                       'aproximação',
USUARIO1 PCK_FUNC_PROV	PACKAGE BODY	47	                                       TO_CHAR(v_dtaproxim, 'DD/MM/YYYY') );
USUARIO1 PCK_FUNC_PROV	PACKAGE BODY	48	      END IF;

USUARIO1 PCK_FUNC_PROV	PACKAGE BODY	49	    END IF;

USUARIO1 PCK_FUNC_PROV	PACKAGE BODY	50	    --

USUARIO1 PCK_FUNC_PROV	PACKAGE BODY	51	    IF (v_dtvac IS NOT NULL) THEN

USUARIO1 PCK_FUNC_PROV	PACKAGE BODY	52	      IF ( (P_AUX.dtini < v_dtvac) AND (P_AUX.dtfim > v_dtvac) ) THEN

USUARIO1 PCK_FUNC_PROV	PACKAGE BODY	53	        GERAL_ERRO_PACK.TRATA_ERRO ( 103,

USUARIO1 PCK_FUNC_PROV	PACKAGE BODY	54	                                       TO_CHAR(P_AUX.dtini, 'DD/MM/YYYY'),

USUARIO1 PCK_FUNC_PROV	PACKAGE BODY	55	                                       TO_CHAR(P_AUX.dtfim, 'DD/MM/YYYY'),

USUARIO1 PCK_FUNC_PROV	PACKAGE BODY	56	                                      'término',
USUARIO1 PCK_FUNC_PROV	PACKAGE BODY	57	                                       TO_CHAR(v_dtvac, 'DD/MM/YYYY') );

USUARIO1 PCK_FUNC_PROV	PACKAGE BODY	58	      END IF;

USUARIO1 PCK_FUNC_PROV	PACKAGE BODY	59	    END IF;

USUARIO1 PCK_FUNC_PROV	PACKAGE BODY	60	 
USUARIO1 PCK_FUNC_PROV	PACKAGE BODY	61	  exception

USUARIO1 PCK_FUNC_PROV	PACKAGE BODY	62	  	when no_data_found then

USUARIO1 PCK_FUNC_PROV	PACKAGE BODY	63	  		null;

USUARIO1 PCK_FUNC_PROV	PACKAGE BODY	64	  END;

USUARIO1 PCK_FUNC_PROV	PACKAGE BODY	65	  --

USUARIO1 PCK_FUNC_PROV	PACKAGE BODY	66	  PROCEDURE ACERTA_DESLOC ( P_NUMFUNC    IN EVENTO_FUNC.numfunc%TYPE,

USUARIO1 PCK_FUNC_PROV	PACKAGE BODY	67	                            P_NUMVINC    IN EVENTO_FUNC.numvinc%TYPE,

USUARIO1 PCK_FUNC_PROV	PACKAGE BODY	68	                            P_TIPOEVENTO IN EVENTO_FUNC.tipoevento%TYPE,

USUARIO1 PCK_FUNC_PROV	PACKAGE BODY	69	                            P_DATA       IN DATE) IS

USUARIO1 PCK_FUNC_PROV	PACKAGE BODY	70	    --

USUARIO1 PCK_FUNC_PROV	PACKAGE BODY	71	    v_data_aux    DATE;

USUARIO1 PCK_FUNC_PROV	PACKAGE BODY	72	    v_data1_aux   DATE;

USUARIO1 PCK_FUNC_PROV	PACKAGE BODY	73	    --

USUARIO1 PCK_FUNC_PROV	PACKAGE BODY	74	    v_max_dtfim   DATE;

USUARIO1 PCK_FUNC_PROV	PACKAGE BODY	75	    v_min_dtini   DATE;

USUARIO1 PCK_FUNC_PROV	PACKAGE BODY	76	    --

USUARIO1 PCK_FUNC_PROV	PACKAGE BODY	77	 BEGIN
USUARIO1 PCK_FUNC_PROV	PACKAGE BODY	78	      --

USUARIO1 PCK_FUNC_PROV	PACKAGE BODY	82	      --

USUARIO1 PCK_FUNC_PROV	PACKAGE BODY	83	      v_max_dtfim := GET_MAX_DTFIM_PROV (P_NUMFUNC, P_NUMVINC, P_DATA);

USUARIO1 PCK_FUNC_PROV	PACKAGE BODY	84	      SELECT /*+ INDEX (EVENTO_FUNC EV_FUNC_DTINI_I) */ dtini

USUARIO1 PCK_FUNC_PROV	PACKAGE BODY	85	        INTO v_data_aux

USUARIO1 PCK_FUNC_PROV	PACKAGE BODY	86	        FROM EVENTO_FUNC

USUARIO1 PCK_FUNC_PROV	PACKAGE BODY	87	       WHERE numfunc = P_NUMFUNC

USUARIO1 PCK_FUNC_PROV	PACKAGE BODY	88	         AND numvinc = P_NUMVINC

USUARIO1 PCK_FUNC_PROV	PACKAGE BODY	89	         AND tipoevento = P_TIPOEVENTO

USUARIO1 PCK_FUNC_PROV	PACKAGE BODY	90	         AND dtfim = v_max_dtfim;

USUARIO1 PCK_FUNC_PROV	PACKAGE BODY	91	      --

USUARIO1 PCK_FUNC_PROV	PACKAGE BODY	96	      v_min_dtini := GET_MIN_DTINI_EV (P_NUMFUNC, P_NUMVINC, P_TIPOEVENTO, v_data_aux);

USUARIO1 PCK_FUNC_PROV	PACKAGE BODY	97	      SELECT /*+ INDEX (EVENTO_FUNC EV_FUNC_DTINI_I) */ dtini

USUARIO1 PCK_FUNC_PROV	PACKAGE BODY	98	        INTO v_data1_aux

USUARIO1 PCK_FUNC_PROV	PACKAGE BODY	99	        FROM EVENTO_FUNC

USUARIO1 PCK_FUNC_PROV	PACKAGE BODY	100	       WHERE numfunc = P_NUMFUNC

USUARIO1 PCK_FUNC_PROV	PACKAGE BODY	101	         AND numvinc = P_NUMVINC

USUARIO1 PCK_FUNC_PROV	PACKAGE BODY	102	         AND tipoevento = P_TIPOEVENTO

USUARIO1 PCK_FUNC_PROV	PACKAGE BODY	103	         AND dtini = v_min_dtini;

USUARIO1 PCK_FUNC_PROV	PACKAGE BODY	104	      --

USUARIO1 PCK_FUNC_PROV	PACKAGE BODY	105	      ATUALIZA_DTFIM_EV ( P_NUMFUNC, P_NUMVINC, P_TIPOEVENTO, v_data_aux, v_data1_aux-1 );

USUARIO1 PCK_FUNC_PROV	PACKAGE BODY	106	      --

USUARIO1 PCK_FUNC_PROV	PACKAGE BODY	107	  EXCEPTION

USUARIO1 PCK_FUNC_PROV	PACKAGE BODY	108	    WHEN NO_DATA_FOUND THEN

USUARIO1 PCK_FUNC_PROV	PACKAGE BODY	109	      NULL;

USUARIO1 PCK_FUNC_PROV	PACKAGE BODY	110	  END;
Renato Menezes Viana
Rank: Analista Pleno
Rank: Analista Pleno
Mensagens: 128
Registrado em: Sáb, 18 Nov 2006 11:51 am
Localização: Rio de Janeiro - RJ

Pessoal:

Pode esquecer o problema.

Queria separar os fontes, mas como a intenção final é consolidar as dependências (XREF) resolvi usar as dependências cruzando APENAS com o PACKAGE, ou seja, caso exista uma procedure com o MESMO NOME (óbvio, object_id é diferente) em um grande universo de fontes o referencial consolidado (XREF) poderá correlacionar "errôneamente", mais pra mim será aceitável, afinal mesmo nome significa função semelhante.

Assim vou colar o select do SQL DEVELOPER:

Selecionar tudo

select * from (
SELECT B.OBJECT_ID, 
   b.owner, 
   b.object_type TYPE, 
   b.object_name NAME,  
   b.status,  
   replace(b.object_type,' ','_') type_link, 
   b.owner sdev_link_owner, 
   b.object_name sdev_link_name, 
   b.object_type sdev_link_type 
FROM 
   sys.all_objects b, 
   (SELECT object_id, referenced_object_id 
    FROM public_dependency 
    START WITH object_id = :OBJECT_ID
    CONNECT BY NOCYCLE PRIOR referenced_object_id = object_id) c 
WHERE b.object_id = c.referenced_object_id 
AND b.owner NOT IN ('SYS', 'SYSTEM') 
AND b.object_name <> 'DUAL'
 ) sub1 order by 4 asc;
Responder
  • Informação