PL / SQL – Cursores
En este capítulo, discutiremos los cursores en PL / SQL. Oracle crea un área de memoria, conocida como área de contexto, para procesar una declaración SQL, que contiene toda la información necesaria para procesar la declaración; por ejemplo, el número de filas procesadas, etc.
Un cursor es un puntero a esta área de contexto. PL / SQL controla el área de contexto a través de un cursor. Un cursor contiene las filas (una o más) devueltas por una instrucción SQL. El conjunto de filas que contiene el cursor se conoce como el conjunto activo.
Puede nombrar un cursor para que se pueda hacer referencia a él en un programa para buscar y procesar las filas devueltas por la instrucción SQL, una a la vez. Hay dos tipos de cursores:
- Cursores implícitos
- Cursores explícitos
Cursores implícitos
Cursores implícitos Oracle las crea automáticamente cada vez que se ejecuta una instrucción SQL, cuando no hay un cursor explícito para la instrucción. Los programadores no pueden controlar los cursores implícitos y la información que contienen.
Siempre que se emite una instrucción DML (INSERT, UPDATE y DELETE), se asocia un cursor implícito con esta instrucción. Para las operaciones INSERT, el cursor contiene los datos que deben insertarse. Para las operaciones UPDATE y DELETE, el cursor identifica las filas que se verían afectadas.
En PL / SQL, puede referirse al cursor implícito más reciente como el cursor SQL, que siempre tiene atributos como% FOUND ,% ISOPEN,% NOTFOUND y% ROWCOUNT. El cursor SQL tiene atributos adicionales,% BULK_ROWCOUNT y% BULK_EXCEPTIONS, diseñados para usarse con la instrucción FORALL. La siguiente tabla proporciona la descripción de los atributos más utilizados:
S.No | Atributo & Descripción |
---|---|
1 |
% FOUND Devuelve TRUE si una instrucción INSERT, UPDATE o DELETE afectó a una o más filas o una instrucción SELECT INTO devolvió una o más filas. De lo contrario, devuelve FALSE. |
2 |
% NO ENCONTRADO Lo opuesto lógico de% FOUND. Devuelve VERDADERO si una instrucción INSERT, UPDATE o DELETE no afectó filas, o una instrucción SELECT INTO no devolvió filas. De lo contrario, devuelve FALSO. |
3 |
% ISOPEN Siempre devuelve FALSE para cursores implícitos, porque Oracle cierra el cursor SQL automáticamente después de ejecutar su declaración SQL asociada. |
4 |
% ROWCOUNT Devuelve el número de filas afectadas por una instrucción INSERT, UPDATE o DELETE, o devuelto por una instrucción SELECT INTO. |
Se accederá a cualquier atributo de cursor SQL como sql% attribute_name como se muestra a continuación en el ejemplo.
Ejemplo
Usaremos la tabla CLIENTES que habíamos creado y usado en los capítulos anteriores.
El siguiente programa actualizará la tabla y aumentará el salario de cada cliente en 500 y usará SQL% Atributo ROWCOUNT para determinar el número de filas afectadas –
Cuando el código anterior se ejecuta en el indicador SQL, produce el siguiente resultado –
6 customers selected PL/SQL procedure successfully completed.
Si comprueba los registros en la tabla de clientes, encontrará que las filas se han actualizado –
Cursores explícitos
Los cursores explícitos son cursores definidos por el programador para obtener más control sobre el área de contexto. Se debe definir un cursor explícito en la sección de declaración del bloque PL / SQL. Se crea en una instrucción SELECT que devuelve más de una fila.
La sintaxis para crear un cursor explícito es –
CURSOR cursor_name IS select_statement;
Trabajando con un cursor explícito incluye los siguientes pasos:
- Declarar el cursor para inicializar la memoria
- Abrir el cursor para asignar la memoria
- Obtener el cursor para recuperar los datos
- Cerrar el cursor para liberar la memoria asignada
Declarar el cursor
Declarar el cursor define el cursor con un nombre y la instrucción SELECT asociada. Por ejemplo:
CURSOR c_customers IS SELECT id, name, address FROM customers;
Abrir el cursor
Abrir el cursor asigna la memoria para el cursor y lo prepara para recuperar las filas devueltas. por la instrucción SQL en él. Por ejemplo, abriremos el cursor definido anteriormente de la siguiente manera:
OPEN c_customers;
Obtener el cursor
Obtener el cursor implica acceder a una fila en un momento. Por ejemplo, buscaremos filas del cursor abierto anteriormente de la siguiente manera:
FETCH c_customers INTO c_id, c_name, c_addr;
Cerrar el cursor
Cerrar el cursor significa soltar la memoria asignada.Por ejemplo, cerraremos el cursor abierto anteriormente de la siguiente manera:
CLOSE c_customers;
Ejemplo
A continuación se muestra un ejemplo completo para ilustrar los conceptos. de cursores explícitos & minua;
Cuando el código anterior se ejecuta en el indicador SQL, produce el siguiente resultado:
1 Ramesh Ahmedabad 2 Khilan Delhi 3 kaushik Kota 4 Chaitali Mumbai 5 Hardik Bhopal 6 Komal MP PL/SQL procedure successfully completed.