jueves, 8 de diciembre de 2016

CURSORES

Un cursor es un puntero a la zona de memoria privada asignada por el servidor Oracle. Se utiliza para manejar el conjunto de resultados de una sentencia SELECT.

Hay dos tipos de cursores: implícitos y explícitos.

  1. Implícito: Creado y gestionado internamente por el servidor Oracle para procesar sentencias SQL
  2. Explícita: Declarado explícitamente por el programador


Usted ya ha aprendido que puede incluir sentencias SQL que devuelven una sola fila en un bloque PL/SQL. Los datos recuperados por la sentencia SQL deberían celebrarse en las variables mediante la cláusula INTO.

De dónde viene el proceso de declaraciones de SQL Server Oracle?
El servidor de Oracle asigna un área de memoria privada llamada el área de contexto para el procesamiento de sentencias SQL. La sentencia SQL se analiza y procesa en esta área. La información necesaria para el procesamiento y la información recuperada después de su transformación se almacenan en esta área. Usted no tiene control sobre esta zona, ya que se maneja internamente por el servidor Oracle.
Un cursor es un puntero a la zona de contexto. Sin embargo, este cursor es un cursor implícito y es gestionado automáticamente por el servidor Oracle. Cuando el bloque ejecutable emite una sentencia SQL, PL / SQL crea un cursor implícito.

Tipos de cursores
Hay dos tipos de cursores:

Implícita: se crea y gestionado por el servidor de Oracle Un cursor implícito. Usted no tiene acceso a ella. El servidor de Oracle crea un cursor como cuando tiene que ejecutar una sentencia SQL.

Explícita: Como programador, es posible que desee recuperar varias filas de una tabla de base de datos, tiene un puntero a cada fila que se recupera, y el trabajo en las filas de una en una. En tales casos, se puede declarar cursores explícitamente en función de sus necesidades de negocio. Un cursor declarado por los programadores se llama cursor explícito. Usted declara un cursor tal en la parte declarativa de un bloque PL / SQL.

1. En la parte declarativa de un bloque PL/SQL, declare el cursor por nombrarlo y la definición de la estructura de la consulta que se asocia con él.
2. Abra el cursor.  La sentencia OPEN ejecuta la consulta y se une cualquier variable que se hace referencia. Filas identificados por la consulta se llaman el conjunto activo y ahora están disponibles para ir a buscar.
3. Obtener los datos desde el cursor.  En el diagrama de flujo mostrado en la diapositiva, después de cada zona de alcance, se prueba el cursor para cualquier fila existente. Si no hay más filas para procesar, debe cerrar el cursor.
4. Cierre el cursor.  La sentencia CLOSE libera el conjunto activo de filas. Ahora es posible reabrir el cursor para establecer un conjunto activo fresco.


Un programa PL/SQL abre un cursor, procesa filas devueltas por una consulta, y luego cierra el cursor. El cursor marca la posición actual en el conjunto activo.
1. La sentencia OPEN ejecuta la consulta asociada con el cursor, identifica el conjunto activo, y posiciona el cursor en la primera fila.
2. La sentencia FETCH recupera la fila actual y avanza el cursor a la siguiente Remar hasta que no haya más filas o se cumple una condición especificada.
3. La sentencia CLOSE libera el cursor.



La sentencia OPEN ejecuta la consulta asociada con el cursor, identifica el conjunto activo, y posiciona el puntero del cursor en la primera fila. La instrucción OPEN está incluido en la sección ejecutable del bloque PL / SQL.
OPEN es una sentencia ejecutable que realiza las siguientes operaciones:
1. asigna dinámicamente la memoria para un área de contexto
2. analiza la instrucción SELECT
3. Se liga las variables de entrada (establece los valores de las variables de entrada mediante la obtención de sus direcciones de memoria)
4. Identifica el conjunto activo (el conjunto de filas que satisfacen los criterios de búsqueda). Las filas en el conjunto activo no se recuperan en variables cuando se ejecute la sentencia OPEN. Más bien, la sentencia FETCH recupera las filas desde el cursor a las variables.
5. Coloca el puntero a la primera fila en el conjunto activo
Nota: Si una consulta no devuelve ninguna fila cuando se abre el cursor, PL / SQL no plantea una excepción. Usted puede encontrar el número de filas devueltas con un cursor explícitos mediante el uso de la <cursor_name>% ROWCOUNT atributo.

La sentencia FETCH recupera las filas de la cursor uno a la vez. Después de cada zona de alcance, el cursor avanza a la siguiente fila en el conjunto activo. Usted puede utilizar el atributo% NOTFOUND para determinar si todo el conjunto activo se ha recuperado.

Considere el ejemplo mostrado en la diapositiva. Dos variables, empno y lname, se declaran para contener los valores han obtenido desde el cursor. Examine la sentencia FETCH.

Haber recogido con éxito los valores desde el cursor a las variables. Sin embargo, hay seis empleados del departamento 30, pero sólo una fila era descabellada. Para recuperar todas las filas, debe utilizar bucles. En la siguiente diapositiva, se ve cómo se utiliza un bucle para buscar a todas las filas.

La sentencia FETCH realiza las siguientes operaciones:
1. Lee los datos de la fila actual en la salida de las variables PL / SQL
2. Avanza el puntero a la siguiente fila en el conjunto activo

Puede incluir el mismo número de variables en la cláusula INTO de la sentencia FETCH ya que hay columnas en la sentencia SELECT; asegúrese de que los tipos de datos son compatibles. Relacionar cada variable para corresponder a las columnas posicionalmente. Alternativamente, también puede definir un récord para el cursor y hacer referencia al registro en el FETCH cláusula INTO. Por último, la prueba para ver si el cursor contiene filas. Si una zona de alcance adquiere ningún valor, no hay filas de izquierda a procesar en el conjunto activo y se registra ningún error.

Share:

0 comentarios:

Publicar un comentario

Archivo

Cual es el tema de mayor interes para ti?