Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Oracle »

[SOLUCIONADO] procedimiento almacenado para IBAN

Estas en el tema de procedimiento almacenado para IBAN en el foro de Oracle en Foros del Web. Necesito crear un proceso almacenado para actualizar todas mis cuentas con el código de control IBAN, necesito actualizar dos campos uno que es IBAN y ...
  #1 (permalink)  
Antiguo 21/11/2013, 02:38
 
Fecha de Ingreso: septiembre-2007
Mensajes: 268
Antigüedad: 12 años, 6 meses
Puntos: 8
procedimiento almacenado para IBAN

Necesito crear un proceso almacenado para actualizar todas mis cuentas con el código de control IBAN, necesito actualizar dos campos uno que es IBAN y otro que es NIB que contiene toda la cuenta es decir 00010002030000000001 los cuatro primeros para el banco, los siguientes para la cuenta y el digito de control.

En el NIB habría que concatenar el IBAN por delante con la cuenta.

Para calcular el IBAN lo único que hay que hacer es con la cuenta hacer el resto de 97 y hacer una resta.

Mi pregunta es el resto tiene alguna limitación de tamaño, porque en lenguajes de programación y javascript falla el código con la cuenta por ser muy grande.

Muchas gracias y perdonen las molestias.
  #2 (permalink)  
Antiguo 21/11/2013, 05:51
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.323
Antigüedad: 12 años, 4 meses
Puntos: 2655
Respuesta: procedimiento almacenado para IBAN

Cita:
Mi pregunta es el resto tiene alguna limitación de tamaño, porque en lenguajes de programación y javascript falla el código con la cuenta por ser muy grande.
Francamente no creo que los lenguajes de programación te presenten un problema para manejar esos códigos, desde le momento en que se lo maneja como cadena de texto, como es sabido.
¿No estarás intentando realizar las verificaciones incorrectamente? ¿Tomando el código entero como si fuese un número?

AL menos postea lo que intentaste para ver por qué tienes problemas.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 21/11/2013, 06:45
 
Fecha de Ingreso: septiembre-2007
Mensajes: 268
Antigüedad: 12 años, 6 meses
Puntos: 8
Respuesta: procedimiento almacenado para IBAN

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Francamente no creo que los lenguajes de programación te presenten un problema para manejar esos códigos, desde le momento en que se lo maneja como cadena de texto, como es sabido.
¿No estarás intentando realizar las verificaciones incorrectamente? ¿Tomando el código entero como si fuese un número?

AL menos postea lo que intentaste para ver por qué tienes problemas.
Mi pregunta es sencilla, si uso la funcion mod de oracle MOD( m, n ), voy a tener algun problema con el tamaño de m.

en javascript al usar m % n, he usado mi cuenta corriente que el resultado es 11 y al hacer esta operacion me ha dado 60, y en java me ha dado una excepcion.

En javascript me falla porque su precision es 16 y las cuentas como minimo son 20 + las seis de control de IBAN. Para solucionarlo tanto en javascript como en java he troceado la cadena con el substring y he ido calculando el resto de cada subcadena.

El problema es actualizar la bbdd para añadir el IBAN y para ello lo que hay que hacer dos consultas a bbdd para recuperar las cuentas de dos tablas.

con un cursor ir recorriendo cada fila:
- recuperar el banco, agencia y completar con ceros hasta que tengan 4 caracteres.
- recuperar el DC y completarlo con ceros hasta que tenga 2 caracteres.
- recuperar el resto de la cuenta y completar con ceros hasta que tenga 10 caracteres.
- concatenar la cuenta banco + '' +agencia+ '' + DC + '' + cuenta;
- concatenar la cadena de control de IBAN, en españa 142800.
- despues de tener toda la cuenta realizar el modulo de 97.

SELECT MOD(cuenta ,97) FROM DUAL;
...
- luego realizar update de la tabla.
  #4 (permalink)  
Antiguo 05/12/2013, 04:15
 
Fecha de Ingreso: agosto-2010
Mensajes: 9
Antigüedad: 9 años, 7 meses
Puntos: 1
Respuesta: procedimiento almacenado para IBAN

has logrado sacar el procedicimiento almacenado para generar el IBAN?
estoy buscando en internet y sólo veo procedimientos que te validan el IBAN, pero no encuentro el que lo genere...
  #5 (permalink)  
Antiguo 05/12/2013, 04:28
 
Fecha de Ingreso: septiembre-2007
Mensajes: 268
Antigüedad: 12 años, 6 meses
Puntos: 8
Respuesta: procedimiento almacenado para IBAN

No lo siento al final lo hecho con una hoja excel, me he descargado de bbdd las cuentas que tenia en bbdd, divididas en banco, agencia, cuenta. configurar la tabla excel para que complete con ceros la columna.

luego he añadido la cadena de control 142800, y he hecho el modulo. y con la funcion del excel concatenar he generado los updates para cada fila.

PD. El codigo debe ser el mismo de validar que el de generar IBAN, la diferencia que he encontrado en validar y generar, es que la cadena a concatenar al final de la cuenta en vez de ser 142800 es 1428 y las dos ultimas cifras del IBAN, si el resultado es 1 el IBAN es correcto sino es incorrecto.
  #6 (permalink)  
Antiguo 05/12/2013, 04:35
 
Fecha de Ingreso: agosto-2010
Mensajes: 9
Antigüedad: 9 años, 7 meses
Puntos: 1
Respuesta: procedimiento almacenado para IBAN

ahhh, ok, muchas gracias por contestar.
no soy muy de procedimientos almacenados así que intentaré lucharlo a ver si me sale.

saludos!
  #7 (permalink)  
Antiguo 09/12/2013, 04:30
 
Fecha de Ingreso: agosto-2010
Mensajes: 9
Antigüedad: 9 años, 7 meses
Puntos: 1
Respuesta: procedimiento almacenado para IBAN

Para el que le interese, con esta función se calcula el código IBAN para una cuenta de España (ESXX):

Código SQL:
Ver original
  1. FUNCTION fn_calculate_IBAN(
  2.   pIBAN IN VARCHAR2
  3. ) RETURN VARCHAR2 AS
  4.       total INTEGER:=0;
  5.       modulus INTEGER:=97;
  6.       IBAN VARCHAR2(256);
  7.       letra_E VARCHAR2(2):=14;
  8.       letra_S VARCHAR2(2):=28;
  9.       cero VARCHAR2(2):=0;
  10.       lResult INTEGER;
  11.       codSpain VARCHAR2(2):='ES';
  12.       lResultStr VARCHAR2(24);
  13.     BEGIN
  14.       IBAN:= pIBAN || letra_E || letra_S || cero || cero;
  15.      
  16.        total:= TO_NUMBER(MOD(IBAN,modulus));
  17.        total:= TO_NUMBER((98 - total));
  18.        lResultStr:= TO_CHAR(total);
  19.        lResultStr:= codSpain || lResultStr;
  20.       RETURN lResultStr;
  21.     END fn_calculate_IBAN;

Última edición por gnzsoloyo; 09/12/2013 a las 04:44
  #8 (permalink)  
Antiguo 09/12/2013, 06:23
 
Fecha de Ingreso: septiembre-2007
Mensajes: 268
Antigüedad: 12 años, 6 meses
Puntos: 8
Respuesta: procedimiento almacenado para IBAN

Y esto no da un pequeño fallo cuando el resultado es del iban es menor que 10, te daria un resultado de ES5 en vez de lo que tenia que ser ES05.

Un saludo y muchas gracias por la respuesta.

Etiquetas: almacenado, procedimiento
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 02:58.