ERP - WebServices - Qual comando pode ser utilizado para encontrar requisições de WebServices em banco de dados Oracle
Dúvida
Qual comando pode ser utilizado para encontrar requisições de WebServices em banco de dados Oracle?
Solução
- Este artigo demonstra apenas um exemplo de comando que pode ser executado no banco de dados Oracle para localizar requisições de WebServices armazenadas nas tabelas R960REQ e R960PAR. Caso ocorra alguma situação na execução do comando, entre em contato com o DBA da sua empresa, pois o comando pode precisar de ajustes dependendo da versão do banco de dados e outras características do seu ambiente;
- Este comando não é compatível com Microsoft SQLServer ou Postgres. Para executar um comando similar no Microsoft SQLServer, verifique o artigo ERP - WebServices - Onde é possível encontrar informações diversas sobre processo de integração via WebServices (índice).
SELECT R960REQ.IDREQ,
TO_CHAR(R960REQ.DATINI,'DD/MM/YYYY HH24:MI:SS') DATINI,
TO_CHAR(R960REQ.DATFIN,'DD/MM/YYYY HH24:MI:SS') DATFIN,
DECODE(R960PAR.TIPPAR,0,'REQUISIÇÃO','RETORNO') TIPO,
TRIM(UTL_RAW.CAST_TO_VARCHAR2(DBMS_LOB.SUBSTR(R960PAR.PARVAL,100,100)) ||
UTL_RAW.CAST_TO_VARCHAR2(DBMS_LOB.SUBSTR(R960PAR.PARVAL,100,201)) ||
UTL_RAW.CAST_TO_VARCHAR2(DBMS_LOB.SUBSTR(R960PAR.PARVAL,100,301)) ||
UTL_RAW.CAST_TO_VARCHAR2(DBMS_LOB.SUBSTR(R960PAR.PARVAL,100,401)) ||
UTL_RAW.CAST_TO_VARCHAR2(DBMS_LOB.SUBSTR(R960PAR.PARVAL,100,501)) ||
UTL_RAW.CAST_TO_VARCHAR2(DBMS_LOB.SUBSTR(R960PAR.PARVAL,100,601))) XML
FROM R960REQ,R960PAR
WHERE R960REQ.IDREQ = R960PAR.IDREQ
AND R960REQ.TIPSER = 'COM_SENIOR_G5_CO_INT_VAREJO_CUPOMFISCAL@GRAVAR' -- PREENCHER COM O NOME DO WEBSERVICE E A PORTA UTILIZADA
AND TRUNC(R960REQ.DATINI) = '09/11/2015' -- PREENCHER COM A DATA DA REQUISIÇÃO
AND DBMS_LOB.INSTR (PARVAL, UTL_RAW.CAST_TO_RAW ('<NUMCFI><![CDATA[62128]]></NUMCFI>'),1,1 ) > 0 -- PREENCHER COM O TEXTO A SER PROCURADO DENTRO DA REQUISIÇÃO
ORDER BY R960REQ.IDREQ, R960REQ.DATINI
Primeiramente crie no banco de dados a seguinte função de nome retornablob
CREATE OR REPLACE FUNCTION RETORNARBLOB(B BLOB)
RETURN CLOB IS
C CLOB;
N NUMBER;
BEGIN
IF (B IS NULL) THEN
RETURN NULL;
END IF;
IF (LENGTH(B)=0) THEN
RETURN EMPTY_CLOB();
END IF;
DBMS_LOB.CREATETEMPORARY(C,TRUE);
N:=1;
WHILE (N+32767<=LENGTH(B)) LOOP
DBMS_LOB.WRITEAPPEND(C,32767,UTL_RAW.CAST_TO_VARCHAR2(DBMS_LOB.SUBSTR(B,32767,N)));
N:=N+32767;
END LOOP;
DBMS_LOB.WRITEAPPEND(C,LENGTH(B)-N+1,UTL_RAW.CAST_TO_VARCHAR2(DBMS_LOB.SUBSTR(B,LENGTH(B)-N+1,N)));
RETURN C;
END;
Abaixo um exemplo de como fazer o select usando a função recém criada para procurar o XML desejado
SELECT A.IDREQ, A.DATINI, B.PARVAL, RETORNARBLOB(B.PARVAL)
FROM R960REQ A
INNER JOIN R960PAR B ON (A.IDREQ = B.IDREQ)
WHERE
A.TIPSER = 'COM.SENIOR.G5.CO.MCM.VEN.PEDIDOS@GRAVARPEDIDOS_13' AND --PREENCHER COM O NOME DO WEBSERVICE E A PORTA UTILIZADA
A.DATINI >= '09/11/2015' AND -- PREENCHER COM A DATA DA REQUISIÇÃO
RETORNARBLOB(B.PARVAL) LIKE '%BLOQUEADO EM FUNÇÃO DA INTEGRAÇÃO%' AND --PREENCHER COM O TEXTO A SER PROCURADO DENTRO DA REQUISIÇÃO
RETORNARBLOB(B.PARVAL) LIKE '%<CODPRO>C01REV0105</CODPRO>%' -- PREENCHER COM O TEXTO A SER PROCURADO DENTRO DA REQUISIÇÃO
- Nos comandos de exemplo você deve preencher as informações conforme destaque em negrito:
- Nome e Porta do WebService (no mesmo padrão conforme exemplo);
- Data da Requisição. A data é opcional, mas você deve levar em conta que ela é um filtro importante para retorno de menor quantidade de registros). O formato da data poderá variar de acordo com o seu ambiente (dia/mês/ano, mês/dia/ano, ano/mês/dia, ...)
- Texto a ser procurado nas requisições: o texto pode variar de acordo com o trecho que você deseja procurar. A busca será realizada tanto em parâmetros de entrada com parâmetros de saída;
- Tome cuidado na execução do comando com relação a utilização de letras minúsculas e maiúsculas. O comando de exemplo está todo em letras maiúsculas, mas o seu banco de dados pode diferenciar os dois tipos e não retornar informações de acordo com a forma que o seu banco de dados interpreta o select.
Para mais informações sobre os WebServices do Gestão Empresarial | ERP, consulte o artigo ERP - WebServices - Onde é possível encontrar informações diversas sobre processo de integração via WebServices (índice).