Problemas de SQL que requieren cursores


Un cursor es una construcción disponible en la mayoría de las implementaciones de SQL que permite al programador manejar los datos fila por fila en lugar de hacerlo como un grupo. El procesamiento paralelo fila por fila es mucho más complejo que el procesamiento en serie, que es otra razón para utilizar SQL no procedimental siempre que sea posible. Los proveedores de bases de datos generalmente manejan el procesamiento paralelo sin requerir un manejo especial por parte de los desarrolladores de aplicaciones.

La siguiente tabla representa los tipos de canicas. Las cuatro columnas de texto representan cuatro características de mármol. Cada característica tiene dos valores para un total de 16 tipos de canicas.

La columna "cantidad" representa cuántas canicas de ese tipo tenemos. La tarea consiste en crear una segunda mesa con una fila para cada canica de ese tipo. Por lo tanto, la tabla de destino tendría las cuatro columnas de texto y un total de 40 + 20 + 20 + 10 + ... + 10 + 5 = 270 filas.

Resolver el problema en SQL sin bucles implica un poco más de código y requiere un poco más de pensamiento creativo que el enfoque de bucle anidado de los cursores.

La solución requiere una mesa intermedia. La tabla tiene una columna de tipo NÚMERO que tiene los valores de 0 a cualquier número de filas que se necesite. Para esta discusión, lo limitaremos a un millón de filas. El código es el siguiente: Configuración:

Suponga que la tabla de tipo de canica anterior se llama marbles_seed y la tabla de destino se llama canicas. El código que genera las 270 filas necesarias es: