Encontrar Nomes Objetos SQL no código JAVA

Forum destinado a Linguagem JAVA! Classes, orientação a objeto, conexão com banco, chamada de 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

Prezados:

Em PL/SQL conseguimos até encontrar quais procedures fazem INSERT em determinada Tabela.

Agora em milhares de linhas de código JAVA, como resolver uma simples questão:

"Quero uma lista contendo os NOMES das TABELAS e de OBJETOS "executáveis" (procedures, functions) que são utilizados".

Note que podemos ter um código JAVA até bem decente, mas podemos ter também indecente. Resumindo:

Sempre existirá em algum lugar do código JAVA escrito algo "...select * from nome_tabela..." ou ...call..."proc_x"...

Muito complicado?

Grato,

Renato
Avatar do usuário
stcoutinho
Moderador
Moderador
Mensagens: 850
Registrado em: Qua, 11 Mai 2011 5:15 pm
Localização: são Paulo - SP

Oi Renato,

Talvez aqui eu esteja exagerando, mas você poderia fazer o seguinte:

1) Crie uma tabela (TBL_COD_JAVA)com dois campos :
NO_CLASSE_JAVA VARCHAR2(100)
NU_LINHA NUMBER(4),
TE_JAVA VARCHAR2(4000)
2) Extraia todos os seus códigos JAVA em arquivos TEXTO;
3) Com a ajuda de um excel, monte uma pasta com 3 colunas. Adicione o texto java na 3a coluna, o nome da classe java na 1a coluna. Coloque o numero da linha na 2a. Exporte o arquivo como CSV (texto, delimitado);
3) Importe todos estes códigos JAVA na tabela do passo 1. Use o SQL*LOADER se for o caso
4) Faça queries de JOIN entre esta tabela e o dicionário de dados. Conecte-se como o OWNER das tabelas e objetos acessados pelo seu código java:
Ex:

Selecionar tudo

           SELECT A.NO_CLASSE_JAVA
                       A.NU_LINHA,
                       A.TE_JAVA
            FROM TBL_COD_JAVA A,
                      USER_TABLES  B
           WHERE UPPER(TE_JAVA) LIKE '%'||B.TABLE_NAME||'%'
5) Você pode fazer vários joins: com USER_TABLES, USER_SEQUENCES, USER_VIEWS, etc

Pode parecer uma idéia lusitana, mas a grosso modo é como você criasse uma espécie de dicionário de dados para seus códigos java, da mesma forma que existe o USER_SOURCE para o código PL/SQL.

Se não desejar fazer isso, talvez você devesse ficar monitorando a sessão SQL que seria acessada por este código JAVA e ficar auditando os comandos. Tipo, fazer que o seu código java se conecte com um usuário específico e monitorar todos os comandos executados no banco por este usuário.

Talvez os foristas tenham outra ideia melhor para o seu problema.

Abraços e boa sorte,

Sergio Coutinho
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

Coutinho: vou tentar. Vou falar com o programador JAVA para conseguir a melhor forma para se ter este arquivo texto onde estaria o fonte JAVA.

Obrigado
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

Coutinho:

Segui sua sugestão e fiz uma procedure WHO_JAVA_XREF que é uma saída.

Veja por aí o que você acha.

Selecionar tudo

create or replace procedure who_java_xref
(
 XPsenha in out varchar2
 )
as

PRAGMA AUTONOMOUS_TRANSACTION;

--*====================================================================
--* Procedure..:  who_java_xref
--* Descricao..:  Atualiza a Tabela Z_JAVA_SQL_XREF com as referências cruzadas
--*               das Tabelas
--*               USER_TABLE, user_views, user_mviews, user_sequences,
--*               USER_SYNONYMS,
--*               USER_PROCEDURES,
--*               além de COMANDOS SQL, incluindo classes JPA Provider,
--*               e rastreamento classes Action pelo cruzamento com a Tabela
--*               Z_ROTINAS que abrigam as URLs das EAPs.
--*
--*               É um PRAGMA AUTONOMOUS_TRANSACTION onde seu commit não
--*               interfere na lógica de nenhuma outra aplicação.
--*               IMPORTANTE:
--*               ==========
--*               
--*               Existe apenas um parâmetro de senha de execução (IN/OUT).
--*               Existe uma aplicação JAVA que recebe o(s) Diretório(s) à partir 
--*               do(s) qual(ais) serão extraídos TODOS os arquivos FONTE (.java; .xml)
--*               fazendo INSERT na Tabela Z_JAVA_SQL_XREF removendo duplicidade pela chave:
--*
--*               NMARQJAV - Nome do Arquivo JAVA (contem todo o path do arquivo C:\...\....java)
--*
--*               A outra componente da chave, NRLIN, fica como segurança da aplicação JAVA e 
--*               como facilitador de ordenação do fonte JAVA.
--*             
--*               Por segurança o reset na Z_JAVA_SQL_XREF (Delete) é feito manualmente quando se
--*               desejar "refazer" o XREF devido o acúmulo de manutenções nas estruturas SQL e/ou
--*               nos fontes JAVA.
--*
--*               Ao final com o comando SQL abaixo é extraida uma Planilha Excel com as referências
--*               SQL presentes nos fontes JAVA permitindo um rastreamento simples por Auto-Filtro.
--*
--*               Select * from Z_JAVA_SQL_XREF where 
--*               RCTABVIESEQ is not null or
--*               RCPROFUN    is not null or
--*               RCSQLCMD    is not null or
--*               RCSYN       is not null or 
--*               RCCLAJPA    is not null or
--*               RCCLAACT    is not null;
--*                
--*               Z_JAVA_SQL_XREF
--*
--*               NMARQJAV	VARCHAR2(2048)
--*               NRLIN	NUMBER(8)
--*               DCLIN	VARCHAR2(2048)
--*               RCTABVIESEQ	VARCHAR2(2048)
--*               RCPROFUN	VARCHAR2(2048)
--*               RCSQLCMD	VARCHAR2(2048)
--*               RCSYN	VARCHAR2(2048)
--*               RCCLAJPA	VARCHAR2(2048)
--*               RCCLAACT	VARCHAR2(2048)
--*                
--* Revisões...:  Criacao da Procedure
--* Data.......:  22/08/2013
--* Autor .....:  Renato Viana
--* Revisões...:
--* Data.......:
--* Autor Rev..:
--*=====================================================================
  
  XPfetchs    number(8);
  XPTAGROWID  ROWID;
  XPNMTAB     VARCHAR2(20);
  XP_já_OUT   VARCHAR2(2048);
  XPEXCLEN    VARCHAR2(20);
  XPEXCOK     VARCHAR2(20);
  
------------ "Record Fetch" Cursor
XNMOBJ        VARCHAR2(256);
Xnmarqjav     VARCHAR2(2048); 
Xnrlin        NUMBER(8); 
Xdclin        VARCHAR2(2048); 
Xrctabvieseq  VARCHAR2(2048); 
Xrcprofun     VARCHAR2(2048); 
Xrcsqlcmd     VARCHAR2(2048); 
Xrcsyn        VARCHAR2(2048); 
Xrcclajpa     VARCHAR2(2048); 
Xrcclaact     VARCHAR2(2048);
Xrowid        ROWID;
  
------------ Cursores   


cursor sqlTABLES is
SELECT 
B.TABLE_NAME,
A.nmarqjav, 
A.nrlin, 
A.dclin, 
A.rctabvieseq, 
A.rcprofun, 
A.rcsqlcmd, 
A.rcsyn, 
A.rcclajpa, 
A.rcclaact,
A.rowid

FROM Z_JAVA_SQL_XREF A,
USER_TABLES B
WHERE A.DCLIN is not null
AND UPPER(A.DCLIN) LIKE '%'||B.TABLE_NAME||'%'

order by a.nmarqjav, a.nrlin;

cursor sqlVIEW is
SELECT 
B.VIEW_NAME,
A.nmarqjav, 
A.nrlin, 
A.dclin, 
A.rctabvieseq, 
A.rcprofun, 
A.rcsqlcmd, 
A.rcsyn, 
A.rcclajpa, 
A.rcclaact,
A.rowid

FROM Z_JAVA_SQL_XREF A,
user_views B
WHERE A.DCLIN is not null
AND UPPER(A.DCLIN) LIKE '%'||B.VIEW_NAME||'%'
order by a.nmarqjav, a.nrlin;

cursor sqlMVIEW is
SELECT 
B.MVIEW_NAME,
A.nmarqjav, 
A.nrlin, 
A.dclin, 
A.rctabvieseq, 
A.rcprofun, 
A.rcsqlcmd, 
A.rcsyn, 
A.rcclajpa, 
A.rcclaact,
A.rowid

FROM Z_JAVA_SQL_XREF A,
user_mviews B
WHERE A.DCLIN is not null
AND UPPER(A.DCLIN) LIKE '%'||B.MVIEW_NAME||'%'
order by a.nmarqjav, a.nrlin;

cursor sqlSEQUENCES is
SELECT 
B.SEQUENCE_NAME,
A.nmarqjav, 
A.nrlin, 
A.dclin, 
A.rctabvieseq, 
A.rcprofun, 
A.rcsqlcmd, 
A.rcsyn, 
A.rcclajpa, 
A.rcclaact,
A.rowid

FROM Z_JAVA_SQL_XREF A,
user_sequences B
WHERE A.DCLIN is not null
AND UPPER(A.DCLIN) LIKE '%'||B.SEQUENCE_NAME||'%'
order by a.nmarqjav, a.nrlin;

cursor sqlSYNONYMS is
SELECT 
B.SYNONYM_NAME,
A.nmarqjav, 
A.nrlin, 
A.dclin, 
A.rctabvieseq, 
A.rcprofun, 
A.rcsqlcmd, 
A.rcsyn, 
A.rcclajpa, 
A.rcclaact,
A.rowid

FROM Z_JAVA_SQL_XREF A,
USER_SYNONYMS B
WHERE A.DCLIN is not null
AND UPPER(A.DCLIN) LIKE '%'||B.SYNONYM_NAME||'%'
order by a.nmarqjav, a.nrlin;

cursor sqlPROCEDURES is
SELECT 
B.object_name,
A.nmarqjav, 
A.nrlin, 
A.dclin, 
A.rctabvieseq, 
A.rcprofun, 
A.rcsqlcmd, 
A.rcsyn, 
A.rcclajpa, 
A.rcclaact,
A.rowid


FROM Z_JAVA_SQL_XREF A,
USER_PROCEDURES B
WHERE A.DCLIN is not null
AND B.PROCEDURE_NAME is null
AND   UPPER(A.DCLIN) LIKE '%'||B.object_name||'%'
order by a.nmarqjav, a.nrlin;



cursor sqlCLAJPA is
SELECT
A.rctabvieseq, 
A.nmarqjav, 
A.nrlin, 
A.dclin, 
A.rctabvieseq, 
A.rcprofun, 
A.rcsqlcmd, 
A.rcsyn, 
A.rcclajpa, 
A.rcclaact,
A.rowid

FROM Z_JAVA_SQL_XREF A


WHERE A.DCLIN is not null
AND a.rcclajpa is null
AND UPPER(a.dclin) LIKE '%@%.CLASS%TABLE%'
order by a.nmarqjav, a.nrlin;

cursor sqlCKCLAJPA is
SELECT
B.rcclajpa,
A.nmarqjav, 
A.nrlin, 
A.dclin, 
B.rctabvieseq, 
A.rcprofun, 
A.rcsqlcmd, 
B.rcsyn, 
A.rcclajpa, 
A.rcclaact,
A.rowid

FROM Z_JAVA_SQL_XREF A,
(SELECT rcclajpa, rctabvieseq, rcsyn from Z_JAVA_SQL_XREF
WHERE rcclajpa is not null) B

WHERE A.DCLIN is not null
AND a.rcclajpa is null
AND UPPER(a.dclin) LIKE '%'||UPPER(B.rcclajpa)||'%'
order by a.nmarqjav, a.nrlin;

cursor sqlCLAACT is
SELECT
B.dcrot,
A.nmarqjav, 
A.nrlin, 
A.dclin, 
A.rctabvieseq, 
A.rcprofun, 
A.rcsqlcmd, 
A.rcsyn, 
A.rcclajpa, 
A.rcclaact,
A.rowid

FROM Z_JAVA_SQL_XREF A,
(select * from z_classeaction) B

WHERE A.DCLIN is not null
AND a.rcclaact is null
AND UPPER(a.dclin) LIKE '%'||UPPER(B.CLASSEACTION)||'%'
order by a.nmarqjav, a.nrlin;

cursor sqlJPACOMMANDS is
SELECT 
B.SQL_COMMAND,
A.nmarqjav, 
A.nrlin, 
A.dclin, 
A.rctabvieseq, 
A.rcprofun, 
A.rcsqlcmd, 
A.rcsyn, 
A.rcclajpa, 
A.rcclaact,
A.rowid


FROM Z_JAVA_SQL_XREF A,
Z_JPACOMMANDS B
WHERE A.DCLIN is not null
AND A.rcclajpa is not null
AND   UPPER(A.DCLIN) LIKE '%'||B.JPACOMMANDS_NAME||'%'
order by a.nmarqjav, a.nrlin;

cursor sqlCOMMANDS is
SELECT 
B.SQL_COMMAND,
A.nmarqjav, 
A.nrlin, 
A.dclin, 
A.rctabvieseq, 
A.rcprofun, 
A.rcsqlcmd, 
A.rcsyn, 
A.rcclajpa, 
A.rcclaact,
A.rowid


FROM Z_JAVA_SQL_XREF A,
Z_SQLCOMMANDS B
WHERE A.DCLIN is not null
AND A.rcclajpa is null
AND   UPPER(A.DCLIN) LIKE '%'||B.SQL_COMMAND||'%'
order by a.nmarqjav, a.nrlin;

-------- já existindo informação agrega com vírgula, além de impedir duplicidade
FUNCTION Z_já_XNMOBJ(
  XZ_já_OLD IN VARCHAR2,
  XZ_já_NEW IN VARCHAR2 )
   RETURN VARCHAR2 AS
   XZ_já_OUT VARCHAR2(2048);
     BEGIN
     
     if XZ_já_OLD is null then
       RETURN XZ_já_NEW;
     end if;
       
     if XZ_já_NEW is null then
       RETURN XZ_já_OLD;
     end if;
     
        
     XZ_já_OUT := XZ_já_OLD || ',' || XZ_já_NEW;
     RETURN XZ_já_OUT;
     
     EXCEPTION
     WHEN OTHERS THEN
          XPEXCLEN := 'OBJ LENGTH > '|| XPNMTAB;
          RETURN XZ_já_OLD;
          
    END Z_já_XNMOBJ;

-------- Informação ObjectSQL User_Tables realmente corresponde ao LIKE %
FUNCTION Z_OK_XNMOBJ (
  XZ_OK_DCLIN IN VARCHAR2,
  XZ_OK_XNMOBJ IN VARCHAR2 )
   RETURN BOOLEAN AS
   XZ_OK_EXISTE NUMBER := 0;
   XZ_OK_ONDE   NUMBER := 1;
   XZ_OK_VEZ    NUMBER := 1;
   XZ_OK_FIM    NUMBER := 1;
   XZ_OK_LEN    NUMBER := 0;

     BEGIN
     
     if XZ_OK_DCLIN is null
     or XZ_OK_XNMOBJ is null then
       RETURN FALSE;
     end if;
       
     if length(XZ_OK_XNMOBJ) > length(XZ_OK_DCLIN) then
       RETURN FALSE;
     end if;
     
     XZ_OK_FIM := length(XZ_OK_DCLIN);
     XZ_OK_LEN := length(XZ_OK_XNMOBJ);
     
     
     LOOP
       
       XZ_OK_ONDE := INSTR(UPPER(XZ_OK_DCLIN),XZ_OK_XNMOBJ,XZ_OK_ONDE,XZ_OK_VEZ);
       IF XZ_OK_ONDE > 0 THEN
         IF (XZ_OK_ONDE + XZ_OK_LEN - 1) = XZ_OK_FIM 
          OR XZ_OK_XNMOBJ || ' ' = UPPER(SUBSTR(XZ_OK_DCLIN,XZ_OK_ONDE,XZ_OK_LEN + 1))
          OR XZ_OK_XNMOBJ || '"' = UPPER(SUBSTR(XZ_OK_DCLIN,XZ_OK_ONDE,XZ_OK_LEN + 1))
          OR XZ_OK_XNMOBJ || '''' = UPPER(SUBSTR(XZ_OK_DCLIN,XZ_OK_ONDE,XZ_OK_LEN + 1))   
          OR XZ_OK_XNMOBJ || ',' = UPPER(SUBSTR(XZ_OK_DCLIN,XZ_OK_ONDE,XZ_OK_LEN + 1))  
          OR XZ_OK_XNMOBJ || ';' = UPPER(SUBSTR(XZ_OK_DCLIN,XZ_OK_ONDE,XZ_OK_LEN + 1))
          OR XZ_OK_XNMOBJ || ')' = UPPER(SUBSTR(XZ_OK_DCLIN,XZ_OK_ONDE,XZ_OK_LEN + 1))
          OR XZ_OK_XNMOBJ || '(' = UPPER(SUBSTR(XZ_OK_DCLIN,XZ_OK_ONDE,XZ_OK_LEN + 1))
         THEN
           XZ_OK_EXISTE := 1;
           RETURN TRUE;
         ELSE
           XZ_OK_VEZ := 2;
         END IF;
       ELSE
         XZ_OK_EXISTE := 0;
         RETURN FALSE;
       END IF;  
       
     END LOOP;
  
     RETURN FALSE;        
         
     EXCEPTION
     WHEN OTHERS THEN
          XPEXCOK := 'EXCEP OK OBJ ' || XPNMTAB;
          RETURN FALSE;
          
    END Z_OK_XNMOBJ; 

    
begin

If XPsenha <> 'pass69' then
   XPsenha := 'Err pass';
   return;
end if;

--- Remove e Recria Tabelas Básicas de Classe Action e Commands SQL
--- ===============================================================
delete z_classeaction;
--- A tabela z_classeaction
--- Aqui Z_ROTINAS corresponde a uma tabela do Sistema em que se faz XREF contendo colunas:
--- DCURLROT = Descrição URL da Rotina que contem path da rotina JAVA que liga um Menu Web
---            responsável pelo "disparo" das funcionalidades (Action) e que normalmente são
---            utilizados no nome das demais classes diretamente ligadas a funcionalida;
--- IDSIS    = Identificador do Sistema em que se faz XREF;
--- DCROT    = Descrição da Rotina Funcional (ID da EAP).
insert into z_classeaction 
(CLASSEACTION, DCURLROT, DCROT)
(select 
case
when INSTR(Z_GET_FILENAME(SUBSTR(dcurlrot,1,(INSTR(dcurlrot,'.do?evento',-1,1)-1))),'man') > 0 
then  
  
SUBSTR(Z_GET_FILENAME(SUBSTR(dcurlrot,1,(INSTR(dcurlrot,'.do?evento',-1,1)-1))),1,
(INSTR((Z_GET_FILENAME(SUBSTR(dcurlrot,1,(INSTR(dcurlrot,'.do?evento',-1,1)-1)))),'man',-1,1)-1))

else
  
Z_GET_FILENAME(SUBSTR(dcurlrot,1,(INSTR(dcurlrot,'.do?evento',-1,1)-1)))

end AS CLASSEACTION
,dcurlrot
,dcrot from Z_ROTINAS where dcurlrot is not null
 and idsis = 36
 and dcurlrot like '%?evento%'
 );
commit; 

--- Outras Tabelas Mencionadas nos Cursores:
--- =======================================
--- Estas tabelas não são removidas ou recriadas aqui neste código.
--- Elas são mantidas externamente em função das necessidades de rastreamento.
---
--- Z_JPACOMMANDS
--- 
--- JPACOMMANDS_NAME  SQLCOMMAND
--- ================  ==========
--- .UPDATE         	UPDATE
--- .MERGE	          UPDATE
--- .SAVE   	        UPDATE
--- .PERSIST        	UPDATE
--- .DELETE 	        DELETE
---
--- Z_SQLCOMMANDS
---
--- SQL_COMMAND
--- ===========
--- CREATE
--- DELETE
--- DROP
--- GRANT
--- INSERT
--- JOIN
--- SELECT
--- UNION
--- UPDATE
--- ALTER


----- Begin Cursor TABLES
XPNMTAB := 'sqlTABLES';
XPTAGROWID := null;
XPfetchs := 0;
XPsenha := 'Open ' || XPNMTAB;
OPEN sqlTABLES;    
XPsenha := 'First Fetch ' || XPNMTAB;
FETCH sqlTABLES INTO
XNMOBJ
,Xnmarqjav     
,Xnrlin        
,Xdclin        
,Xrctabvieseq  
,Xrcprofun     
,Xrcsqlcmd    
,Xrcsyn        
,Xrcclajpa     
,Xrcclaact     
,Xrowid;

XPsenha := 'Question END ' || XPNMTAB;

WHILE sqlTABLES%FOUND LOOP
    
XPfetchs := XPfetchs + 1;
XPsenha := 'Fetch ' || XPNMTAB || ' ' || XPfetchs;

--- Verifica necessidade de Recuperação Fecth devido a um possível UPDATE
if XPTAGROWID = Xrowid then
XPsenha := 'Select ' || XPNMTAB || ' ' || XPfetchs;  
SELECT rctabvieseq 
INTO  Xrctabvieseq
FROM Z_JAVA_SQL_XREF
WHERE ROWID = Xrowid;
end if;

--- Verifica se o OBJ é Realmente Válido
IF Z_OK_XNMOBJ(Xdclin,XNMOBJ) THEN

--- O novo objeto OK, JÁ existindo na(s) SAÍDA(s), ou seja, no(s) XP_já_OUT,
--- significa que NÃO DEVE NOVAMENTE SER ADICIONADO evitando duplicidade.
     
IF NOT Z_OK_XNMOBJ(Xrctabvieseq,XNMOBJ) THEN


XP_já_OUT := Z_já_XNMOBJ(Xrctabvieseq,XNMOBJ);
XPsenha := 'Update ' || XPNMTAB || ' ' || XPfetchs;
  
UPDATE Z_JAVA_SQL_XREF
SET rctabvieseq = XP_já_OUT
WHERE ROWID = Xrowid;

END IF;

--- Guarda Rowid para teste de Recuperação Fetch após UPDATE
XPTAGROWID := Xrowid;


END IF;

FETCH sqlTABLES INTO
XNMOBJ
,Xnmarqjav     
,Xnrlin        
,Xdclin        
,Xrctabvieseq  
,Xrcprofun     
,Xrcsqlcmd    
,Xrcsyn        
,Xrcclajpa     
,Xrcclaact     
,Xrowid;

END LOOP;
XPsenha := 'COMMIT ' || XPNMTAB;
COMMIT;
XPsenha := 'Close ' || XPNMTAB;
CLOSE sqlTABLES; 
----- END Cursor TABLES


----- Begin Cursor VIEW
XPNMTAB := 'sqlVIEW';
XPTAGROWID := null;
XPfetchs := 0;
XPsenha := 'Open ' || XPNMTAB;
OPEN sqlVIEW;    
XPsenha := 'First Fetch ' || XPNMTAB;
FETCH sqlVIEW INTO
XNMOBJ
,Xnmarqjav     
,Xnrlin        
,Xdclin        
,Xrctabvieseq  
,Xrcprofun     
,Xrcsqlcmd    
,Xrcsyn        
,Xrcclajpa     
,Xrcclaact     
,Xrowid;

XPsenha := 'Question END ' || XPNMTAB;

WHILE sqlVIEW%FOUND LOOP

XPfetchs := XPfetchs + 1;
XPsenha := 'Fetch ' || XPNMTAB || ' ' || XPfetchs;

--- Verifica necessidade de Recuperação Fecth devido a um possível UPDATE
if XPTAGROWID = Xrowid then
XPsenha := 'Select ' || XPNMTAB || ' ' || XPfetchs;  
SELECT rctabvieseq 
INTO  Xrctabvieseq
FROM Z_JAVA_SQL_XREF
WHERE ROWID = Xrowid;
end if;

--- Verifica se o OBJ é Realmente Válido
IF Z_OK_XNMOBJ(Xdclin,XNMOBJ) THEN

--- O novo objeto OK, JÁ existindo na(s) SAÍDA(s), ou seja, no(s) XP_já_OUT,
--- significa que NÃO DEVE NOVAMENTE SER ADICIONADO evitando duplicidade.
     
IF NOT Z_OK_XNMOBJ(Xrctabvieseq,XNMOBJ) THEN


XP_já_OUT := Z_já_XNMOBJ(Xrctabvieseq,XNMOBJ);
XPsenha := 'Update ' || XPNMTAB || ' ' || XPfetchs;
  
UPDATE Z_JAVA_SQL_XREF
SET rctabvieseq = XP_já_OUT
WHERE ROWID = Xrowid;

END IF;

--- Guarda Rowid para teste de Recuperação Fetch após UPDATE
XPTAGROWID := Xrowid;


END IF;

FETCH sqlVIEW INTO
XNMOBJ
,Xnmarqjav     
,Xnrlin        
,Xdclin        
,Xrctabvieseq  
,Xrcprofun     
,Xrcsqlcmd    
,Xrcsyn        
,Xrcclajpa     
,Xrcclaact     
,Xrowid;

END LOOP;
XPsenha := 'COMMIT ' || XPNMTAB;
COMMIT;
XPsenha := 'Close ' || XPNMTAB;
CLOSE sqlVIEW; 
----- END Cursor VIEW
 

----- Begin Cursor MVIEW (O uso deste cursor pode ser dispensado quando TABLES o contiver)
XPNMTAB := 'sqlMVIEW';
XPTAGROWID := null;
XPfetchs := 0;
XPsenha := 'Open ' || XPNMTAB;
OPEN sqlMVIEW;    
XPsenha := 'First Fetch ' || XPNMTAB;
FETCH sqlMVIEW INTO
XNMOBJ
,Xnmarqjav     
,Xnrlin        
,Xdclin        
,Xrctabvieseq  
,Xrcprofun     
,Xrcsqlcmd    
,Xrcsyn        
,Xrcclajpa     
,Xrcclaact     
,Xrowid;

XPsenha := 'Question END ' || XPNMTAB;

WHILE sqlMVIEW%FOUND LOOP
  
XPfetchs := XPfetchs + 1;
XPsenha := 'Fetch ' || XPNMTAB || ' ' || XPfetchs;

--- Verifica necessidade de Recuperação Fecth devido a um possível UPDATE
if XPTAGROWID = Xrowid then
XPsenha := 'Select ' || XPNMTAB || ' ' || XPfetchs;  
SELECT rctabvieseq 
INTO  Xrctabvieseq
FROM Z_JAVA_SQL_XREF
WHERE ROWID = Xrowid;
end if;

--- Verifica se o OBJ é Realmente Válido
IF Z_OK_XNMOBJ(Xdclin,XNMOBJ) THEN

--- O novo objeto OK, JÁ existindo na(s) SAÍDA(s), ou seja, no(s) XP_já_OUT,
--- significa que NÃO DEVE NOVAMENTE SER ADICIONADO evitando duplicidade.
     
IF NOT Z_OK_XNMOBJ(Xrctabvieseq,XNMOBJ) THEN


XP_já_OUT := Z_já_XNMOBJ(Xrctabvieseq,XNMOBJ);
XPsenha := 'Update ' || XPNMTAB || ' ' || XPfetchs;
  
UPDATE Z_JAVA_SQL_XREF
SET rctabvieseq = XP_já_OUT
WHERE ROWID = Xrowid;

END IF;

--- Guarda Rowid para teste de Recuperação Fetch após UPDATE
XPTAGROWID := Xrowid;


END IF;

FETCH sqlMVIEW INTO
XNMOBJ
,Xnmarqjav     
,Xnrlin        
,Xdclin        
,Xrctabvieseq  
,Xrcprofun     
,Xrcsqlcmd    
,Xrcsyn        
,Xrcclajpa     
,Xrcclaact     
,Xrowid;

END LOOP;
XPsenha := 'COMMIT ' || XPNMTAB;
COMMIT;
XPsenha := 'Close ' || XPNMTAB;
CLOSE sqlMVIEW; 
----- END Cursor MVIEW


----- Begin Cursor sqlSEQUENCES
XPNMTAB := 'sqlSEQUENCES';
XPTAGROWID := null;
XPfetchs := 0;
XPsenha := 'Open ' || XPNMTAB;
OPEN sqlSEQUENCES;    
XPsenha := 'First Fetch ' || XPNMTAB;
FETCH sqlSEQUENCES INTO
XNMOBJ
,Xnmarqjav     
,Xnrlin        
,Xdclin        
,Xrctabvieseq  
,Xrcprofun     
,Xrcsqlcmd    
,Xrcsyn        
,Xrcclajpa     
,Xrcclaact     
,Xrowid;

XPsenha := 'Question END ' || XPNMTAB;

WHILE sqlSEQUENCES%FOUND LOOP

XPfetchs := XPfetchs + 1;
XPsenha := 'Fetch ' || XPNMTAB || ' ' || XPfetchs;

--- Verifica necessidade de Recuperação Fecth devido a um possível UPDATE
if XPTAGROWID = Xrowid then
XPsenha := 'Select ' || XPNMTAB || ' ' || XPfetchs;  
SELECT rctabvieseq 
INTO  Xrctabvieseq
FROM Z_JAVA_SQL_XREF
WHERE ROWID = Xrowid;
end if;

--- Verifica se o OBJ é Realmente Válido
IF Z_OK_XNMOBJ(Xdclin,XNMOBJ) THEN

--- O novo objeto OK, JÁ existindo na(s) SAÍDA(s), ou seja, no(s) XP_já_OUT,
--- significa que NÃO DEVE NOVAMENTE SER ADICIONADO evitando duplicidade.
     
IF NOT Z_OK_XNMOBJ(Xrctabvieseq,XNMOBJ) THEN


XP_já_OUT := Z_já_XNMOBJ(Xrctabvieseq,XNMOBJ);
XPsenha := 'Update ' || XPNMTAB || ' ' || XPfetchs;
  
UPDATE Z_JAVA_SQL_XREF
SET rctabvieseq = XP_já_OUT
WHERE ROWID = Xrowid;

END IF;

--- Guarda Rowid para teste de Recuperação Fetch após UPDATE
XPTAGROWID := Xrowid;


END IF;

FETCH sqlSEQUENCES INTO
XNMOBJ
,Xnmarqjav     
,Xnrlin        
,Xdclin        
,Xrctabvieseq  
,Xrcprofun     
,Xrcsqlcmd    
,Xrcsyn        
,Xrcclajpa     
,Xrcclaact     
,Xrowid;

END LOOP;
XPsenha := 'COMMIT ' || XPNMTAB;
COMMIT;
XPsenha := 'Close ' || XPNMTAB;
CLOSE sqlSEQUENCES; 
----- END Cursor sqlSEQUENCES


----- Begin Cursor sqlSYNONYMS
XPNMTAB := 'sqlSYNONYMS';
XPTAGROWID := null;
XPfetchs := 0;
XPsenha := 'Open ' || XPNMTAB;
OPEN sqlSYNONYMS;    
XPsenha := 'First Fetch ' || XPNMTAB;
FETCH sqlSYNONYMS INTO
XNMOBJ
,Xnmarqjav     
,Xnrlin        
,Xdclin        
,Xrctabvieseq  
,Xrcprofun     
,Xrcsqlcmd    
,Xrcsyn        
,Xrcclajpa     
,Xrcclaact     
,Xrowid;

XPsenha := 'Question END ' || XPNMTAB;

WHILE sqlSYNONYMS%FOUND LOOP

XPfetchs := XPfetchs + 1;
XPsenha := 'Fetch ' || XPNMTAB || ' ' || XPfetchs;

--- Verifica necessidade de Recuperação Fecth devido a um possível UPDATE
if XPTAGROWID = Xrowid then
XPsenha := 'Select ' || XPNMTAB || ' ' || XPfetchs;  
SELECT rcsyn 
INTO  Xrcsyn
FROM z_java_sql_xref
WHERE ROWID = Xrowid;
end if;

--- Verifica se o OBJ é Realmente Válido
IF Z_OK_XNMOBJ(Xdclin,XNMOBJ) THEN

--- O novo objeto OK, JÁ existindo na(s) SAÍDA(s), ou seja, no(s) XP_já_OUT,
--- significa que NÃO DEVE NOVAMENTE SER ADICIONADO evitando duplicidade.
     
IF NOT Z_OK_XNMOBJ(Xrcsyn,XNMOBJ) THEN


XP_já_OUT := Z_já_XNMOBJ(Xrcsyn,XNMOBJ);
XPsenha := 'Update ' || XPNMTAB || ' ' || XPfetchs;
  
UPDATE Z_JAVA_SQL_XREF
SET rcsyn = XP_já_OUT
WHERE ROWID = Xrowid;

END IF;

--- Guarda Rowid para teste de Recuperação Fetch após UPDATE
XPTAGROWID := Xrowid;


END IF;

FETCH sqlSYNONYMS INTO
XNMOBJ
,Xnmarqjav     
,Xnrlin        
,Xdclin        
,Xrctabvieseq  
,Xrcprofun     
,Xrcsqlcmd    
,Xrcsyn        
,Xrcclajpa     
,Xrcclaact     
,Xrowid;

END LOOP;
XPsenha := 'COMMIT ' || XPNMTAB;
COMMIT;
XPsenha := 'Close ' || XPNMTAB;
CLOSE sqlSYNONYMS; 
----- END Cursor sqlSYNONYMS


----- Begin Cursor sqlPROCEDURES
XPNMTAB := 'sqlPROCEDURES';
XPTAGROWID := null;
XPfetchs := 0;
XPsenha := 'Open ' || XPNMTAB;
OPEN sqlPROCEDURES;    
XPsenha := 'First Fetch ' || XPNMTAB;
FETCH sqlPROCEDURES INTO
XNMOBJ
,Xnmarqjav     
,Xnrlin        
,Xdclin        
,Xrctabvieseq  
,Xrcprofun     
,Xrcsqlcmd    
,Xrcsyn        
,Xrcclajpa     
,Xrcclaact     
,Xrowid;

XPsenha := 'Question END ' || XPNMTAB;

WHILE sqlPROCEDURES%FOUND LOOP

XPfetchs := XPfetchs + 1;
XPsenha := 'Fetch ' || XPNMTAB || ' ' || XPfetchs;

--- Verifica necessidade de Recuperação Fecth devido a um possível UPDATE
if XPTAGROWID = Xrowid then
XPsenha := 'Select ' || XPNMTAB || ' ' || XPfetchs;  
SELECT rcprofun 
INTO  Xrcprofun
FROM Z_JAVA_SQL_XREF
WHERE ROWID = Xrowid;
end if;

--- Verifica se o OBJ é Realmente Válido
IF Z_OK_XNMOBJ(Xdclin,XNMOBJ) THEN

--- O novo objeto OK, JÁ existindo na(s) SAÍDA(s), ou seja, no(s) XP_já_OUT,
--- significa que NÃO DEVE NOVAMENTE SER ADICIONADO evitando duplicidade.
     
IF NOT Z_OK_XNMOBJ(Xrcprofun,XNMOBJ) THEN


XP_já_OUT := Z_já_XNMOBJ(Xrcprofun,XNMOBJ);
XPsenha := 'Update ' || XPNMTAB || ' ' || XPfetchs;
  
UPDATE Z_JAVA_SQL_XREF
SET rcprofun = XP_já_OUT
WHERE ROWID = Xrowid;

END IF;

--- Guarda Rowid para teste de Recuperação Fetch após UPDATE
XPTAGROWID := Xrowid;


END IF;

FETCH sqlPROCEDURES INTO
XNMOBJ
,Xnmarqjav     
,Xnrlin        
,Xdclin        
,Xrctabvieseq  
,Xrcprofun     
,Xrcsqlcmd    
,Xrcsyn        
,Xrcclajpa     
,Xrcclaact     
,Xrowid;

END LOOP;
XPsenha := 'COMMIT ' || XPNMTAB;
COMMIT;
XPsenha := 'Close ' || XPNMTAB;
CLOSE sqlPROCEDURES; 
----- END Cursor sqlPROCEDURES



----- Begin Cursor sqlCLAJPA
XPNMTAB := 'sqlCLAJPA';
XPTAGROWID := null;
XPfetchs := 0;
XPsenha := 'Open ' || XPNMTAB;
OPEN sqlCLAJPA;    
XPsenha := 'First Fetch ' || XPNMTAB;
FETCH sqlCLAJPA INTO
XNMOBJ
,Xnmarqjav     
,Xnrlin        
,Xdclin        
,Xrctabvieseq  
,Xrcprofun     
,Xrcsqlcmd    
,Xrcsyn        
,Xrcclajpa     
,Xrcclaact     
,Xrowid;

XPsenha := 'Question END ' || XPNMTAB;

WHILE sqlCLAJPA%FOUND LOOP
    
XPfetchs := XPfetchs + 1;
XPsenha := 'Fetch ' || XPNMTAB || ' ' || XPfetchs;

--- Verifica necessidade de Recuperação Fecth devido a um possível UPDATE
if XPTAGROWID = Xrowid then
XPsenha := 'Select ' || XPNMTAB || ' ' || XPfetchs;  
SELECT rcclajpa
INTO  Xrcclajpa
FROM Z_JAVA_SQL_XREF
WHERE ROWID = Xrowid;
end if;

--- Verifica se o OBJ é Realmente Válido
IF Z_OK_XNMOBJ(Xdclin,Xrctabvieseq) 
OR Z_OK_XNMOBJ(Xdclin,Xrcsyn) THEN

--- Cria o OBJ JPA utilizando a nomenclatura do arquivo
XNMOBJ := UPPER(Z_get_left_tag(z_get_filename(Xnmarqjav),'.'));

--- O novo objeto OK, JÁ existindo na(s) SAÍDA(s), ou seja, no(s) XP_já_OUT,
--- significa que NÃO DEVE NOVAMENTE SER ADICIONADO evitando duplicidade.
     
IF NOT Z_OK_XNMOBJ(Xrcclajpa,XNMOBJ) THEN


XP_já_OUT := Z_já_XNMOBJ(Xrcclajpa,XNMOBJ);
XPsenha := 'Update ' || XPNMTAB || ' ' || XPfetchs;
  
UPDATE Z_JAVA_SQL_XREF
SET rcclajpa = XP_já_OUT
WHERE ROWID = Xrowid;

END IF;

--- Guarda Rowid para teste de Recuperação Fetch após UPDATE
XPTAGROWID := Xrowid;


END IF;

FETCH sqlCLAJPA INTO
XNMOBJ
,Xnmarqjav     
,Xnrlin        
,Xdclin        
,Xrctabvieseq  
,Xrcprofun     
,Xrcsqlcmd    
,Xrcsyn        
,Xrcclajpa     
,Xrcclaact     
,Xrowid;

END LOOP;
XPsenha := 'COMMIT ' || XPNMTAB;
COMMIT;
XPsenha := 'Close ' || XPNMTAB;
CLOSE sqlCLAJPA; 
----- END Cursor sqlCLAJPA


----- Begin Cursor sqlCKCLAJPA (Onde a CLAJPA montada anteriormente possui referencia)
XPNMTAB := 'sqlCKCLAJPA';
XPTAGROWID := null;
XPfetchs := 0;
XPsenha := 'Open ' || XPNMTAB;
OPEN sqlCKCLAJPA;    
XPsenha := 'First Fetch ' || XPNMTAB;
FETCH sqlCKCLAJPA INTO
XNMOBJ
,Xnmarqjav     
,Xnrlin        
,Xdclin        
,Xrctabvieseq  
,Xrcprofun     
,Xrcsqlcmd    
,Xrcsyn        
,Xrcclajpa     
,Xrcclaact     
,Xrowid;

XPsenha := 'Question END ' || XPNMTAB;

WHILE sqlCKCLAJPA%FOUND LOOP
  
XPfetchs := XPfetchs + 1;
XPsenha := 'Fetch ' || XPNMTAB || ' ' || XPfetchs;

--- Verifica necessidade de Recuperação Fecth devido a um possível UPDATE
if XPTAGROWID = Xrowid then
XPsenha := 'Select ' || XPNMTAB || ' ' || XPfetchs;  
SELECT rcclajpa 
INTO  Xrcclajpa
FROM Z_JAVA_SQL_XREF
WHERE ROWID = Xrowid;
end if;

--- Verifica se o OBJ é Realmente Válido
IF Z_OK_XNMOBJ(Xdclin,XNMOBJ) THEN

--- O novo objeto OK, JÁ existindo na(s) SAÍDA(s), ou seja, no(s) XP_já_OUT,
--- significa que NÃO DEVE NOVAMENTE SER ADICIONADO evitando duplicidade.
     
IF NOT Z_OK_XNMOBJ(Xrcclajpa,XNMOBJ) THEN


XP_já_OUT := Z_já_XNMOBJ(Xrcclajpa,XNMOBJ);
XPsenha := 'Update ' || XPNMTAB || ' ' || XPfetchs;
  
UPDATE Z_JAVA_SQL_XREF
SET rcclajpa = XP_já_OUT
WHERE ROWID = Xrowid;

END IF;

--- Guarda Rowid para teste de Recuperação Fetch após UPDATE
XPTAGROWID := Xrowid;


END IF;

FETCH sqlCKCLAJPA INTO
XNMOBJ
,Xnmarqjav     
,Xnrlin        
,Xdclin        
,Xrctabvieseq  
,Xrcprofun     
,Xrcsqlcmd    
,Xrcsyn        
,Xrcclajpa     
,Xrcclaact     
,Xrowid;

END LOOP;
XPsenha := 'COMMIT ' || XPNMTAB;
COMMIT;
XPsenha := 'Close ' || XPNMTAB;
CLOSE sqlCKCLAJPA; 
----- END Cursor sqlCKCLAJPA

<<CLASSE>>

----- Begin Cursor sqlCLAACT
XPNMTAB := 'sqlCLAACT';
XPTAGROWID := null;
XPfetchs := 0;
XPsenha := 'Open ' || XPNMTAB;
OPEN sqlCLAACT;    
XPsenha := 'First Fetch ' || XPNMTAB;
FETCH sqlCLAACT INTO
XNMOBJ
,Xnmarqjav     
,Xnrlin        
,Xdclin        
,Xrctabvieseq  
,Xrcprofun     
,Xrcsqlcmd    
,Xrcsyn        
,Xrcclajpa     
,Xrcclaact     
,Xrowid;

XPsenha := 'Question END ' || XPNMTAB;

WHILE sqlCLAACT%FOUND LOOP
 
XPfetchs := XPfetchs + 1;
XPsenha := 'Fetch ' || XPNMTAB || ' ' || XPfetchs;

XNMOBJ := UPPER(XNMOBJ);
--- Verifica necessidade de Recuperação Fecth devido a um possível UPDATE
if XPTAGROWID = Xrowid then
XPsenha := 'Select ' || XPNMTAB || ' ' || XPfetchs;  
SELECT rcclaact 
INTO  Xrcclaact
FROM Z_JAVA_SQL_XREF
WHERE ROWID = Xrowid;
end if;

--- NÃO Verifica se o OBJ é Realmente Válido 
--- === pois, aqui a finalidade é rastrear proximidade (LIKE) com a classe ACTION
--- === além do que, o OBJ POSICIONADO é o ID DA EAP correlacionada a classe ACTION
IF Z_OK_XNMOBJ(XNMOBJ,XNMOBJ) THEN

--- O novo objeto OK, JÁ existindo na(s) SAÍDA(s), ou seja, no(s) XP_já_OUT,
--- significa que NÃO DEVE NOVAMENTE SER ADICIONADO evitando duplicidade.
     
IF NOT Z_OK_XNMOBJ(Xrcclaact,XNMOBJ) THEN


XP_já_OUT := Z_já_XNMOBJ(Xrcclaact,XNMOBJ);
XPsenha := 'Update ' || XPNMTAB || ' ' || XPfetchs;
  
UPDATE Z_JAVA_SQL_XREF
SET rcclaact = XP_já_OUT
WHERE ROWID = Xrowid;

END IF;

--- Guarda Rowid para teste de Recuperação Fetch após UPDATE
XPTAGROWID := Xrowid;


END IF;

FETCH sqlCLAACT INTO
XNMOBJ
,Xnmarqjav     
,Xnrlin        
,Xdclin        
,Xrctabvieseq  
,Xrcprofun     
,Xrcsqlcmd    
,Xrcsyn        
,Xrcclajpa     
,Xrcclaact     
,Xrowid;

END LOOP;
XPsenha := 'COMMIT ' || XPNMTAB;
COMMIT;
XPsenha := 'Close ' || XPNMTAB;
CLOSE sqlCLAACT; 
----- END Cursor sqlCLAACT


----- Begin Cursor sqlJPACOMMANDS
XPNMTAB := 'sqlJPACOMMANDS';
XPTAGROWID := null;
XPfetchs := 0;
XPsenha := 'Open ' || XPNMTAB;
OPEN sqlJPACOMMANDS;    
XPsenha := 'First Fetch ' || XPNMTAB;
FETCH sqlJPACOMMANDS INTO
XNMOBJ
,Xnmarqjav     
,Xnrlin        
,Xdclin        
,Xrctabvieseq  
,Xrcprofun     
,Xrcsqlcmd    
,Xrcsyn        
,Xrcclajpa     
,Xrcclaact     
,Xrowid;

XPsenha := 'Question END ' || XPNMTAB;

WHILE sqlJPACOMMANDS%FOUND LOOP
   
XPfetchs := XPfetchs + 1;
XPsenha := 'Fetch ' || XPNMTAB || ' ' || XPfetchs;

XNMOBJ := UPPER(XNMOBJ);
--- Verifica necessidade de Recuperação Fecth devido a um possível UPDATE
if XPTAGROWID = Xrowid then
XPsenha := 'Select ' || XPNMTAB || ' ' || XPfetchs;  
SELECT rcsqlcmd
INTO  Xrcsqlcmd
FROM Z_JAVA_SQL_XREF
WHERE ROWID = Xrowid;
end if;

--- NÃO Verifica se o OBJ é Realmente Válido 
--- === pois, aqui a finalidade é rastrear proximidade (LIKE) com a commands JPA
--- === além do que, o OBJ POSICIONADO é um command SQL
IF Z_OK_XNMOBJ(XNMOBJ,XNMOBJ) THEN

--- O novo objeto OK, JÁ existindo na(s) SAÍDA(s), ou seja, no(s) XP_já_OUT,
--- significa que NÃO DEVE NOVAMENTE SER ADICIONADO evitando duplicidade.
     
IF NOT Z_OK_XNMOBJ(Xrcsqlcmd,XNMOBJ) THEN


XP_já_OUT := Z_já_XNMOBJ(Xrcsqlcmd,XNMOBJ);
XPsenha := 'Update ' || XPNMTAB || ' ' || XPfetchs;
  
UPDATE Z_JAVA_SQL_XREF
SET rcsqlcmd = XP_já_OUT
WHERE ROWID = Xrowid;

END IF;

--- Guarda Rowid para teste de Recuperação Fetch após UPDATE
XPTAGROWID := Xrowid;


END IF;

FETCH sqlJPACOMMANDS INTO
XNMOBJ
,Xnmarqjav     
,Xnrlin        
,Xdclin        
,Xrctabvieseq  
,Xrcprofun     
,Xrcsqlcmd    
,Xrcsyn        
,Xrcclajpa     
,Xrcclaact     
,Xrowid;

END LOOP;
XPsenha := 'COMMIT ' || XPNMTAB;
COMMIT;
XPsenha := 'Close ' || XPNMTAB;
CLOSE sqlJPACOMMANDS; 
----- END Cursor sqlJPACOMMANDS


----- Begin Cursor sqlCOMMANDS
XPNMTAB := 'sqlCOMMANDS';
XPTAGROWID := null;
XPfetchs := 0;
XPsenha := 'Open ' || XPNMTAB;
OPEN sqlCOMMANDS;    
XPsenha := 'First Fetch ' || XPNMTAB;
FETCH sqlCOMMANDS INTO
XNMOBJ
,Xnmarqjav     
,Xnrlin        
,Xdclin        
,Xrctabvieseq  
,Xrcprofun     
,Xrcsqlcmd    
,Xrcsyn        
,Xrcclajpa     
,Xrcclaact     
,Xrowid;

XPsenha := 'Question END ' || XPNMTAB;

WHILE sqlCOMMANDS%FOUND LOOP
   
XPfetchs := XPfetchs + 1;
XPsenha := 'Fetch ' || XPNMTAB || ' ' || XPfetchs;

--- Verifica necessidade de Recuperação Fecth devido a um possível UPDATE
if XPTAGROWID = Xrowid then
XPsenha := 'Select ' || XPNMTAB || ' ' || XPfetchs;  
SELECT rcsqlcmd
INTO  Xrcsqlcmd
FROM Z_JAVA_SQL_XREF
WHERE ROWID = Xrowid;
end if;

--- Verifica se o OBJ é Realmente Válido
IF Z_OK_XNMOBJ(Xdclin,XNMOBJ) THEN

--- O novo objeto OK, JÁ existindo na(s) SAÍDA(s), ou seja, no(s) XP_já_OUT,
--- significa que NÃO DEVE NOVAMENTE SER ADICIONADO evitando duplicidade.
     
IF NOT Z_OK_XNMOBJ(Xrcsqlcmd,XNMOBJ) THEN


XP_já_OUT := Z_já_XNMOBJ(Xrcsqlcmd,XNMOBJ);
XPsenha := 'Update ' || XPNMTAB || ' ' || XPfetchs;
  
UPDATE Z_JAVA_SQL_XREF
SET rcsqlcmd = XP_já_OUT
WHERE ROWID = Xrowid;

END IF;

--- Guarda Rowid para teste de Recuperação Fetch após UPDATE
XPTAGROWID := Xrowid;


END IF;

FETCH sqlCOMMANDS INTO
XNMOBJ
,Xnmarqjav     
,Xnrlin        
,Xdclin        
,Xrctabvieseq  
,Xrcprofun     
,Xrcsqlcmd    
,Xrcsyn        
,Xrcclajpa     
,Xrcclaact     
,Xrowid;

END LOOP;
XPsenha := 'COMMIT ' || XPNMTAB;
COMMIT;
XPsenha := 'Close ' || XPNMTAB;
CLOSE sqlCOMMANDS; 
----- END Cursor sqlCOMMANDS


return;

     EXCEPTION
       WHEN OTHERS THEN
         XPSENHA := XPSENHA || sqlerrm;
         return;

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

Coutinho:

Como agora só falta o utilitário, em Desktop, JAVA para à partir do(s) diretório(s) fornecido(s) inserir todos os fontes java (.java; .xml) na Tabela Z_JAVA_SQL_XREF alimentando as colunas NMARQJAV, NRLIN e DCLIN.

Quem sabe, você não pode confeccioná-lo?

Anexei uma série de informações sobre arquivos sequenciais no zip.

Um abraço,

Renato Viana
Anexos
ORARQSEQ.rar
(1.18 MiB) Baixado 883 vezes
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

Coutinho:

Já fiz a rotina básica abaixo. Depois foi apenas adaptá-la para receber nomes de todos os arquivos .java e .xml partindo de um diretório.

Um abraço,

Renato Viana

Selecionar tudo

import java.io.*;
import java.sql.*;

import javax.swing.JOptionPane;
 


class FileToSQL{

public static void main(String args[]) {
	Connection con = null;
try {
//----- Aqui adaptar pro BANCO DE DADOS ------
Class.forName("oracle.jdbc.driver.OracleDriver");
con = DriverManager.getConnection("jdbc:oracle:thin:@192.NNN.NNN.NNN:1521:ID_DO_SEU_BANCO","SEU_USUARIO","SUA_SENHA");
Statement stm = con.createStatement();
//----

// aqui preciso dos nomes completos alimentarem esta classe
String arquivo1 = JOptionPane.showInputDialog("Entre com o nome do Arquivo a ser incluido");
BufferedReader reader = new BufferedReader(new FileReader(arquivo1)); 
String dados[] = new String[3]; 
int NRLIN = 0; // number(8) na tabela SQL

// alguma coisa parecida para guardar o nome completo do arquivo para delete e insert
dados[0] = arquivo1; 
stm.executeUpdate("delete Z_JAVA_SQL_XREF where NMARQJAV = '"+dados[0]+"' "); // a coluna pkey aqui é o nome do arquivo 

String linha = null; // reset na linha 



linha = reader.readLine(); // primeiro read da linha


	while (linha != null) { // loop leitura das linhas até o fim
	
// ---- aqui pode fazer todos os tratamentos em cada linha preparando nas colunas da tabela
		
	NRLIN = NRLIN + 1; // é a coluna complemento da PKEY contendo o numero da linha
	
	stm.executeUpdate("insert into Z_JAVA_SQL_XREF (NMARQJAV,NRLIN,DCLIN) values ('"+dados[0]+"','"+NRLIN+"','"+linha+"')"); // inclusões
	
	linha = reader.readLine(); // leitura das demais linhas
	}
	
	con.commit(); // ao fim faz commit
	System.out.println(arquivo1 + " Arquivo importado");
	
}
catch (Exception e) {
	if (con != null) {
		try {
			con.rollback(); // aqui se der qualquer problema faz rollback
		} catch (SQLException e1) {
			e1.printStackTrace();
		}
	}
System.err.println("Erro: " + e.getMessage());
}
}
}
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

acerta a linha aí com as duas abaixo, porque apareceu "quebrada"...

Selecionar tudo

con = DriverManager.getConnection("jdbc:oracle:thin:@192.NNN.NNN.NNN:1521:ID_DO_SEU_BANCO",
"SEU_USUARIO","SUA_SENHA");
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:

Um "patch 19/9/2013" na WHO_JAVA_XREF, foi acrescentado OR perguntando sobre ponto:

Selecionar tudo

LOOP
       
       XZ_OK_ONDE := INSTR(UPPER(XZ_OK_DCLIN),XZ_OK_XNMOBJ,XZ_OK_ONDE,XZ_OK_VEZ);
       IF XZ_OK_ONDE > 0 THEN
         IF (XZ_OK_ONDE + XZ_OK_LEN - 1) = XZ_OK_FIM 
          OR XZ_OK_XNMOBJ || ' ' = UPPER(SUBSTR(XZ_OK_DCLIN,XZ_OK_ONDE,XZ_OK_LEN + 1))
          OR XZ_OK_XNMOBJ || '"' = UPPER(SUBSTR(XZ_OK_DCLIN,XZ_OK_ONDE,XZ_OK_LEN + 1))
          OR XZ_OK_XNMOBJ || '''' = UPPER(SUBSTR(XZ_OK_DCLIN,XZ_OK_ONDE,XZ_OK_LEN + 1))   
          OR XZ_OK_XNMOBJ || ',' = UPPER(SUBSTR(XZ_OK_DCLIN,XZ_OK_ONDE,XZ_OK_LEN + 1))  
          OR XZ_OK_XNMOBJ || ';' = UPPER(SUBSTR(XZ_OK_DCLIN,XZ_OK_ONDE,XZ_OK_LEN + 1))
          OR XZ_OK_XNMOBJ || ')' = UPPER(SUBSTR(XZ_OK_DCLIN,XZ_OK_ONDE,XZ_OK_LEN + 1))
          OR XZ_OK_XNMOBJ || '(' = UPPER(SUBSTR(XZ_OK_DCLIN,XZ_OK_ONDE,XZ_OK_LEN + 1))
          OR XZ_OK_XNMOBJ || '.' = UPPER(SUBSTR(XZ_OK_DCLIN,XZ_OK_ONDE,XZ_OK_LEN + 1)) -- 19/9/2013
         THEN
           XZ_OK_EXISTE := 1;
           RETURN TRUE;
         ELSE
           XZ_OK_VEZ := 2;
         END IF;
       ELSE
         XZ_OK_EXISTE := 0;
         RETURN FALSE;
       END IF;  
       
     END LOOP;
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

Prezados:

Anexei um "clone" da WHO_JAVA_XREF, a WHO_SQL_XREF.

Agora é possível uma referência cruzada de objetos SQL nos próprios fontes "executáveis" SQL (procedure, function, etc) inclusive com referências ao possível código JAVA (faz uso das referências geradas pela WHO_JAVA_XREF).

Um abraço,

Renato Viana
Anexos
who_sql_xref.zip
Procedure Referência Cruzada Objetos SQL e JAVA
(5.16 KiB) Baixado 890 vezes
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:

Anexei um ZIP com todo os fontes JAVA compondo o aplicativo que faz o UPLOAD no ORACLE de todos os fontes java à partir de um diretório informado.

Abs, Renato Viana
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: aí vai o ZIP.
Anexos
JavaXref.zip
Fontes Java UPLOAD no Oracle
(92.75 KiB) Baixado 789 vezes
DanielNN
Moderador
Moderador
Mensagens: 641
Registrado em: Seg, 03 Set 2007 3:26 pm
Localização: Fortaleza - CE
att,

Daniel N.N.

Parabéns Renato pelo trabalho realizado e à sua contribuição ao Fórum.
OBS:Vou precisar disto em breve. :D.
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: agora tudo foi melhorado no tópico abaixo, confiram.

http://glufke.net/oracle/viewtopic.php?f=2&t=9849

Abs,
Renato Viana
https://br.linkedin.com/pub/renato-mene ... 35/573/11b
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 2 visitantes