Oggi stavo provando un orchestrazione... a un certo punto mi da un errore ORA-06502 !!
Avendo  implementato un meccanismo di backup dei file ricevuti in pasto , sono  risalito velocemente al file che ha generato l'errore. Per farla breve e  semplificando accade questo:
1.  Bizzy riceve un file xml  al cui interno cè un campo DECIMAL
2. Ho una mappa che non fa altro che assegnare il valore di quel campo ad un altro schema
3  Il secondo file xml , istanziato dalla trasformazione serve per passare  i dati a una stored procedure che va ad inserire i dati in oracle...
 Semplice no?
Ecco  cosa accade... l'orchestrazione si incastra perchè dice che gli arriva  un formato errato causato da una conversione sbagliata?!?!!?!? (il  famoso errore ORA-06502),
ah.. dimenticavo il dato DECIMAL è  scritto cosi 4.6 e non con la virgola!!! (poichè in oracle la , non  funziona come separatore decimale) .
Un'altra cosa  interessante è che l'adapter oracle è configurato mediante DNS, chè è  legato al regional setting della macchina!!! 
Ho cercato di capire il motivo e potrebbe essere:
1) Regional setting della macchina di biztalk ha impostato la , come separatore decimale
2) Regional setting della macchina di oracle ha impostato la , come separatore decimale 
Non  potendo gestire manualmente su queste impostazioni, poichè non sono  amministratore della macchiana mi sono trovato in difficoltà!!
 Il  perchè della trasformazione del valore 4.5 a 4,5 non lo ho capito bene  chi lo fa... ma credo sia durante la chiamata SOAP per richiamare la  stored (al SEND del messaggio tanto per capirci)...
 COME FARE????
Per ovviare il problema ho fatto cosi:
1) sapendo a priori dal DB la dimensione dei numeri decimali (sempre fissa)
2)  ho usato nella mappa un functoid moltiplicatore e ho moltiplicato il  valore per il numero dei decimali ( es. 4 decimali ... x10000) 
3) ho ampliato chiaramente la dimensione della colonna nel DB per evitare problemi di dimensioni dato...
4) aggiornata la stored procedure di insert dividendo il valore per il valore del moltiplicatore ( es. /10000)
5) deployato :-)
ecco fatto! ora funziona!!!
Mi rimane cmq il dubbio.... e se qualcuno sa dirmi se ha trovato una VALIDA alternativa ....
Ciao!
Nessun commento:
Posta un commento