TISS – Gerar Hash do XML manualmente com Notepad++

Gerar manualmente o hash de um XML de Lote Guias ou qualquer outro XML do padrão da ANS nem sempre é uma tarefa fácil. Uma das possibilidades é gerar o hash manualmente a partir das informações do XML através de um gerador de hash md5 online.

Neste tutorial utilizamos o Notepad++ (https://notepad-plus-plus.org) com o plugin XML Tools que pode ser encontrado em: (https://sourceforge.net/projects/npp-plugins/files/XML%20Tools/.

Após instalado o Notepad++, instale o Plugin XML Tools através do Plugin Manager do Notepad++, siga os passos:

  1. Abra o Notepad++
  2. Acesse o menu Plugins > Plugin Manager > Show Plugin Manager
  3. Procure pelo “XML Tools” na aba Avaiable e clique no botão Install
  4. Após instalado, reinicie o Notepad++. O plugin XML Tools deve aparecer como última opção do menu Plugin conforme Imagem a seguir.

xml-tools

 

Com o Notepad++ e o Plugin XML Tools instalados, abra(ou copie o contéudo) o XML desejado no Notepad++ para geração do hash. Neste exemplo usaremos um XML de Lote de Guias gerado no formato de Client de WebService. (Poderia ser o XML padrão que começa com <ans:mensagemTISS> que é feito Upload para todas as operadoras de plano de saúde ou qualquer outro XML da ANS). Vamos aos passos:

  1. Com o XML aberto no Notepad++ procure a tag referente ao hash para excluir o seu valor. No nosso exemplo é a tag <ans:hash>. (Cada XML da ANS possui uma tag de hash que geralmente possui a palavra hash.)
    limpar-hash
  2. Após removido o conteúdo da tag <ans:hash>, vamos utilizar o plugin XML Tools para transformar o XML em uma única linha via comando Linarize.
    linarizeApós executado esse comando o seu XML deve ficar nesse estilo:
    linarizado
  3. Abra o prompt de Replace do Notepad++ com o atalho CTRL+H ou pelo menu Search -> Replace, pesquise pelo seguinte trecho de expressão regular: <[^>]+>  e clique em REPLACE ALL (atenção: o modo de pesquisa deve ser “Regular Expression”)replace
  4. Após feita a substituição de todas as tags XML, você terá em mãos o conteúdo puro para cálculo do Hash MD5 (padrão utilizado pela ANS até o momento). Acesse um site para cálculo de hash MD5 ou utilize funções PHP ou Java para cálculo de MD5 e cole esse conteúdo e solicite o cálculo do Hash.No nosso exemplo temos o conteúdo
    ENVIO_LOTE_GUIAS82016-07-3012:33:01.0000000-03:0060219370000273.02.0160219377ace4e300c9fa2b00cdaa7a325d1793b80000271513100000661488638100005800NIRACI CARREIRA6021937EDSON FELIX DA SILVA2270927EDSON FELIX DA SILVA70310012403322371092016-07-222221010101230.00

    que após executar pelo site Md5HashGenerator gerou o HASH 61b1c87318e0759bb150e4cb1625e684Alguns exemplos de site que calculam hash md5 online:
    http://www.md5hashgenerator.com/index.php (usado nesse tutorial)
    http://md5-hash-online.waraxe.us/

    Obs: Cuidado com alguns sites que geram hash online, pois estes utilizam algoritmos MD5 que não condizem com o algoritmo da ANS (em teste deveria ser universal kkk). O que pude perceber é que caracteres especiais alteram a forma como os sites calculam o HASH.

  5. Com o valor de Hash em mãos substitua no arquivo original na tag de hash <ans:hash>
    hash-substitui

Fim!


Oracle – Dica Rápida: Pesquisar texto no corpo dos objetos function, trigger, procedure e packages

Dicas simples para pesquisar nos objetos do banco por um texto específico. Esta rotina pesquisa em objetos do tipo FUNCTION, TRIGGER, PROCEDURE E PACKAGES. Para proceder com a pesquisa substitua os campos TEXTO_PROCURADOe SEU_SCHEMA

SELECT OWNER||'.'||NAME,LINE,TEXT
  FROM ALL_SOURCE
 WHERE TYPE IN ('TRIGGER','FUNCTION','PACKAGE BODY','PROCEDURE')
   AND UPPER(TEXT) LIKE UPPER('%TEXTO_PROCURADO%') 
   AND OWNER IN ('SEU_SCHEMA')

Caso deseje, você poderá transformar esta query em uma procedure que imprime os resultados em tela (para chamadas rápidas):

CREATE OR REPLACE PROCEDURE pesquisa_texto(P_TEXTO IN VARCHAR2) is

BEGIN

 FOR R IN (
 SELECT OWNER||'.'||NAME LOCALIZ,LINE,TEXT
  FROM ALL_SOURCE
 WHERE TYPE IN ('TRIGGER','FUNCTION','PACKAGE BODY','PROCEDURE')
   AND UPPER(TEXT) LIKE UPPER('%'||P_TEXTO||'%') -- TEXTO PROCURADO
   AND OWNER IN ('SEU_SCHEMA')
 ) LOOP
        Dbms_Output.Put_Line('LOCAL: '||R.LOCALIZ||' - '||'LINE: '||R.LINE||' - TEXT: '||R.TEXT);
 END LOOP;

END;
/

Como resolver ORA-14450: attempt to access a transactional temp table already in use Tabela temporária Oracle

Um erro que pode incomodar bastante durante a atualização de uma tabela temporária é o :

ORA-14450: attempt to access a transactional temp table already in use

A mensagem apesar de clara pode ser difícil de tratar caso você não consiga identificar e/ou derrubar todas as sessões conectadas. Dessa forma, caso deseje “forçar” a alteração de uma tabela desse tipo, siga os seguintes passos:

  1. Execute o comando
    lock table <SCHEMA>.<TABELA_TEMPORARIA> in exclusive mode;
  2. Desconecte da sessão e conecte novamente no Banco (Ex: utilizando Sql Tools ou PLSQL Developer)
  3. Após conectado execute a seguinte Query:
    SELECT * FROM v$lock WHERE id1 = (SELECT object_id FROM all_objects WHERE owner =<SCHEMA> AND object_name =<TABELA_TEMPORARIA>);
    
  4. Ao identificar uma linha nesse select, vamos proceder “matando” a sessão:
    ALTER SYSTEM KILL SESSION '<sid>,<serial#>';
  5. Depois de executado o comando KILL e confirmado sua execução com sucesso, você poderá executar o comando DDL desejado:
    ALTER TABLE <SCHEMA>.<TABELA_TEMPORARIA> MODIFY(COLUNA NUMBER (20,0));
  6. Por fim, libere o lock realizado no passo1 através do comando:
    rollback;

E só 😉



Conexão JDBC para Oracle RAC (Cluster)

Um cluster consiste em multiplos computadores interconectados ou servidores que têm como objetivo compartilhar/ processar requisições de usuários em aplicações para usuários finais. O Oracle RAC permite que um Database seja clusterizado e ele utiliza o Oracle Clusterware como infraestrutura para processar várias instances como um sistema único.

O ORACLE RAC (real application cluster) é uma solução de banco de dados em cluster que requer dois ou mais nós de hardware capazes de trabalhar juntos sob o controle de um sistema operacional. Se você precisa conectar uma aplicação java via JDBC a um banco Oracle RAC o formato clássico de String de conexão  não vai funcionar.

 jdbc:oracle:thin:@<HOST>:1521:<SID>

A string que deve ser utilizada para uma conexão Oracle RAC é

DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=ENDERECO_HOST1)(PORT=1521))(ADDRESS=(PROTOCOL=TCP)(HOST=ENDERECO_HOST2)(PORT=1521))(LOAD_BALANCE=ON)(FAILOVER=ON))(CONNECT_DATA=(SERVICE_NAME=NOME_DO_SERVICE_NAME)(FAILOVER_MODE=(TYPE=select)(METHOD=basic)))

Para descobrir o NOME_DO_SERVICE_NAME , procure pelo arquivo tsnames.ora (geralmente localizado em C:\orant\NETWORK\ADMIN – Plataforma Windows)

Cada “Address” do Address_List representa um servidor de conexão, fique atento aos IP’s de cada Host!

 


Páginas:1234567...17