Dada la siguiente estructura de una base (este es un modelo simplificado en pseudocódigo del trabajo; solo a fines de estimación):
Tabla A_REF (ID: NUMBER(10) PK, HASH: VARCHAR(255), CODES (VARCHAR(4000)))
Tabla B (ID: NUMBER(10) PK, A_REF_ID: NUMBER(10) FK de A_REF, CODE: CHAR(2), POSITION: NUMBER(8), C_REF_ID: NUMBER(10) FK de C)
Tabla C (ID: NUMBER(10) PK, D_ID: NUMBER(10))
Se debe implementar un Stored Procedure en PL/SQL que, a partir de un número D_ID, haga lo siguiente:
SP updateCodes(D_ID [in])
{
1) Iterar por todos los A_REF
2) Por cada A_REF, ver qué elementos de la tabla B cumplen con tener asociado
un C con el D_ID que se le pasa por parámetro (por medio de la FK). Sólo para esos elementos de B seguir en 3.
3) El campo CODES de A_REF, debe ser un "array" (o lo que equivalga más aprox. a esta idea en Oracle) de 2000 posiciones (4000 caracteres), el cual debe llenarse con los códigos (CODE: 2 caracteres cada código) que se encuentren en B en el offset del array CODES que aparece en la POSITION de B. Las POSITION que no hayan aparecido en B, deben llenarse con espacios vacios en CODES.
4) Por último debe calcularse un hash del array CODES y guardarlo en el "array" (ya tenemos código PL/SQL que hace el cálculo del Hash).
}
Debe entenderse que esto es lo que debe desarrollarse funcionalmente. Este stored procedure lo que busca es precalcular ciertos datos para su posterior usa; será corrido una vez al día. A pesar de esto el script deberá ser lo más eficiente posible, por lo cual estamos abiertos a propuestas que cambien la estructura del SP dado, siempre y cuando se mantenga la funcionalidad pedida.
Aclaraciones:
POSITION siempre está en el rango [1, 2000]
CODES debe ser un campo de texto, de 4000 caracteres que aloja 2000 códigos de 2 caracteres cada código. Si no se encuentra en B alguna de estas 2000 posiciones, en dichas posiciones deben aparecer 2 caracteres blanco a modo de código.
Se proveerá el script que generará la tabla A_REF, B y C. También se proveerán datos de prueba.
Por favor, realizar todas las preguntas que piensen necesarias para poder estimar y presupuestar.
Muchas gracias
![País: Argentina [ar]](http://static.trabajofreelance.com/images/flags/ar.gif)
![GeoTrust [GeoTrust]](http://static.trabajofreelance.com/images/seal/geotrust.gif)
![PayPal [PayPal]](http://static.trabajofreelance.com/images/seal/paypal.gif)
![Visa [Visa]](http://static.trabajofreelance.com/images/seal/visa.gif)
![MasterCard [MasterCard]](http://static.trabajofreelance.com/images/seal/mastercard.gif)
![Feeds [Feeds]](http://static.trabajofreelance.com/images/seal/rss.png)
![Blog [Blog]](http://static.trabajofreelance.com/images/seal/wordpress.png)
![Facebook [Facebook]](http://static.trabajofreelance.com/images/seal/facebook.png)
![Twitter [Twitter]](http://static.trabajofreelance.com/images/seal/twitter.png)
![Linkedin [Linkedin]](http://static.trabajofreelance.com/images/seal/linkedin.png)
![Youtube [Youtube]](http://static.trabajofreelance.com/images/seal/youtube.png)