El bucle FOR

El bucle FOR es posiblemente el bucle más importante implementado en PL / PgSQL. Utilice el bucle For para iterar un bloque de instrucciones sobre un rango de enteros que especifique. La estructura de un bucle FOR en PL / PgSQL es similar a FORloops en otros lenguajes de procedimiento, como C.

En un bucle FOR PL/PgSQL, primero se indica una variable entera, para rastrear la iteración del bucle, luego se da el rango entero y finalmente se proporciona un bloque de instrucciones. La variable entera creada para rastrear la iteración del bucle se destruye una vez que el bucle sale; no tiene que declararse en la sección de declaración del bloque. A continuación se muestra la sintaxis del bucle FOR:

 FOR identifier IN expression1 .. expression2 LOOP statement; END LOOP;

El bucle FOR realizará una única iteración para cada valor incrementado de identificador que se encuentre en el rango de valores entre, e incluyendo, expresión1 y expresión2. El valor del identificador se inicializará al valor de expression1, independientemente de cualquier configuración anterior, y se incrementará en una por iteración. Si se especifica Reverse, el identificador se decrementará en lugar de incrementarse.

Nota: El identificador utilizado para rastrear la iteración no necesita ser declarado fuera del bloque For, a menos que desee poder acceder a su valor después de que el bucle haya finalizado.

El bucle FOR también se puede usar para recorrer los resultados de una consulta. El segundo bucle FOR en el Ejemplo 11-45 muestra el uso de un bucle aFOR para trabajar con variables de REGISTRO y % TIPO DE FILA. La sintaxis de un bucle FOR que interactúa a través de las variables RECORD y % ROWTYPE se muestra en la siguiente sintaxis:

 FOR { record_variable | %rowtype_variable } IN select_statement LOOP statement; END LOOP;

En el ejemplo 11-45, la función extract_all_titles () se usa para extraer una lista de todos los títulos de libros que existen en la base de datos, organizados por tema. Cuando un sujeto no tiene títulos de libro, se muestra la línea de ablank. La lista se devuelve como una variable de texto. Se utiliza un bucle FOR dentro de la función extract_all_titles () para recorrer los subjects disponibles por número.

Otro bucle FOR está anidado dentro del bucle original para recorrer los libros disponibles y recuperar todos los libros con valores subject_id que coinciden con la variable de iteración del bucle original, que representa el número de ID del sujeto actual que la función está buscando. En el ejemplo 11-45, la variable de iteración i se inicializa a cero porque el primer número de ID de sujeto en nuestra tabla de sujetos es 0.

El ejemplo 11-46 muestra el código de otra función que utiliza un bucle aFOR para recorrer los resultados de una consulta SQL. Con cada iteración del bucle, el bucle FOR en el ejemplo 11-46 coloca el contenido de una fila de resultados de una consulta contra la tabla books en la variable row_data, y luego inserta el valor del campo título de la fila en la variableext_output.

El bucle termina cuando se alcanza el último registro en los libros. Al final del bucle,text_output contendrá una lista de todos los títulos de libros que coincidan con el número de ID del asunto que se ha pasado a la función. La variable text_output se devuelve al final de la función.

El ejemplo 11-47 muestra los resultados de la funciónextract_title () cuando 2, que representa»Libros para niños» en la tabla subject, se pasa como argumento.

La variable row_data se declara como un tipo de fila %de la tabla books porque solo se utilizará para mantener registros de la tabla books. Podríamos haber declarado row_data como aRECORD para lograr el mismo resultado, pero el tipo de registro debe usarse cuando se va a usar la variable para más de las filas de una tabla específica:

row_data RECORD;

La función extract_title () devolverá los mismos resultados si los datos de fila se declaran como REGISTRO o se declaran usando%ROWTYPE.

Deja una respuesta

Tu dirección de correo electrónico no será publicada.