ıllı Internet y Tecnologías de la Información (2018)

internet, Hosting, dominios, seo, antivirus, banco de imágenes, páginas web, tiendas online

[Enciclopedia Online Gratuita] Diccionario de Internet y Tecnologías de la Información y la Comunicación (TIC):

ıllı Cursor (base de datos) wiki: info, historia y vídeos

videos internet

salud  Cursor (base de datos) 


Esta sección introduce la manera en la que los cursores habrían de ser empleados en aplicaciones con SQL empotrado, conforme el estándar SQL:2003. No todas y cada una de las capas de aplicación para sistemas de bases de datos relacionales prosiguen este estándar, usando en su sitio una interfaz diferente, como CLI o bien JDBC.


Un cursor es creado usando la sentencia DECLARE CURSOR. Es obligatorio asignarle un nombre.

DECLARE cursor_name CURSOR FOR SELECT... FROM...

Antes de ser usado, el cursor ha de ser abierto con una sentencia OPEN. A resultas de esta sentencia, el cursor se posiciona ya antes de la primera fila del set de resultados.

OPEN cursor_name

Un cursor se posiciona en una fila concreta del set de resultados con la sentencia FETCH. Una sentencia fetch trasfiere la información de la fila a la aplicación. Una vez todas y cada una de las filas han sido procesadas o bien la sentencia fetch queda posicionada en una fila no existente (ver cursores de recorrido más abajo), el SGBD devuelve un SQLSTATE '02000' (acompañado en general de un SQLCODE +100) para señalar el final del set de resultados.

FETCH cursor_name INTO...

El último paso consiste en cerrar el cursor usando la sentencia CLOSE.

CLOSE cursor_name

Una vez un cursor está cerrado puede reabrirse nuevamente, lo que implica que la consulta es revaluada y se crea un nuevo set de resultados.


Cursores de recorrido


Los cursores pueden declararse como de recorrido o bien no. Si son de recorrido, este señala la dirección en la que el cursor puede moverse.


Un cursor sin recorrido (non-scrollable en inglés) asimismo se conoce como cursor unidireccional (forward-only en inglés). Cada fila puede ser leída como mucho una vez, y el cursor de manera automática se mueve a la próxima fila. Una operación de fetch tras haber recuperado la última fila posiciona el cursor tras exactamente la misma y devuelve SQLSTATE dos mil (SQLCODE +100).


Un cursor de recorrido puede posicionarse en cualquier una parte del set de resultados usando la sentencia SQL FETCH. La palabra clave ha de ser concretada cuando se declare el cursor. El valor por defecto es NO SCROLL, si bien ciertas capas de aplicación para bases de datos como JDBC pueden aplicar un valor por defecto diferente.

DECLARE cursor_namesensitivitySCROLL CURSOR FOR SELECT... FROM...

La situación de un cursor de recorrido puede concretarse de forma relativa a la situación actual del cursor o bien de forma absoluta desde el principio del set de resultados.

FETCH FROM cursor_name
FETCH ABSOLUTE n FROM cursor_name
FETCH RELATIVE n FROM cursor_name

Los cursores de recorrido pueden potencialmente acceder a exactamente la misma fila del set de resultados múltiples veces. En consecuencia, modificaciones de datos (insert, update, delete) efectuadas por otras transacciones podrían tener un impacto en el set de resultados. Un cursor puede ser sensible o bien indiferente a semejantes modificaciones. Un cursor sensible recogería las modificaciones que afectarían al set de resultados, al paso que uno indiferente no. De manera adicional, un cursor puede ser asensible, en tal caso el SGBD procurará, en lo posible, aplicar los cambios tal y como si fuera sensible.


Por norma los cursores son cerrados de manera automática al final de una transacción, esto es, cuando se ejecuta un COMMIT o bien un ROLLBACK, o cuando se da un cierre tácito de la transacción. Este comportamiento puede ser alterado si el cursor es declarado usando la cláusula WITH HOLD (por defecto cualquier cursor va a ser WITHOUT HOLD). Un cursor declarado con esta cláusula se sostiene abierto tras un COMMIT y se cierra tras un ROLLBACK, si bien ciertos SGBD se desvían de este comportamiento estándar y sostienen abierto estos cursores tras un ROLLBACK.

DECLARE cursor_name CURSOR WITH HOLD FOR SELECT... FROM...

Cuando se ejecuta un COMMIT, el cursor WITH HOLD se posiciona ya antes de la próxima fila o bien registro. Por consiguiente, una operación UPDATE o bien DELETE posicionada solo va a funcionar tras haber efectuado primero un FETCH en exactamente la misma transacción.


JDBC define los cursores como WITH HOLD por defecto. Esto se hace por el hecho de que JDBC activa la opción de auto-commit por defecto. Debido a la sobrecarga frecuente relacionada con el auto-commit y los cursores WITH HOLD, los dos habrían de estar explícitamente desactivados en el nivel de conexión.


Sentencias Update/Delete posicionadas


Los cursores no solo pueden ser empleados para extraer información de la base de datos a una aplicación, sino asimismo sirven para identificar una fila a alterar o bien borrar en una tabla. El estándar SQL:2003 define para tal fin las sentencias posicionadas Update y Delete . Estas sentencias no usan una cláusula WHERE normal (con predicados de condición). En cambio, el cursor identifica la fila, para lo que ha de ser abierto y posicionado en exactamente la misma usando la sentencia FETCH .

UPDATE table_name SET ... WHERE CURRENT OFcursor_name
DELETE FROM table_name WHERE CURRENT OFcursor_name

El cursor debe operar sobre un set de resultados que sea modificable a fin de que una sentencia posicionada UPDATE o bien DELETE pueda ejecutarse exitosamente. De lo contrario, el SGBD no sabría como aplicar los cambios en los datos a las tablas latentes referidas en el cursor.


Cursores en transacciones distribuidas


Usar cursores en transacciones distribuidas (ambientes X/open XA), que son controladas usando un monitor de transacciones, no es diferente que utilizar cursores en transacciones no distribuidas.


Aun de esta manera, se debe prestar atención al utilizar cursores WITH HOLD. Las conexiones pueden ser utilizadas por diferentes aplicaciones. Por ende, una vez una transacción ha sido confirmada y ha terminado, una transacción subsecuente (que fuera de otra aplicación) podría heredar cursores WITH HOLD ya existentes.Este es un punto que los programadores de aplicaciones deben tomar en consideración.


La siguiente información puede cambiar en dependencia del sistemas gestores de bases de datos.


Recuperar una fila del cursor puede resultar en un retraso, conocido en inglés como network round trip, y que se debe al mismo tiempo preciso para mandar la solicitud al SGBD y aguardar los datos. Ello supone la utilización de considerablemente más ancho de banda de la red de lo que se precisaría normalmente para ejecutar una sola sentencia SQL como DELETE. Repetidos network round trips pueden suponer un impacto severo en la velocidad de operación del cursor. Ciertos SGBD procuran disminuir al mínimo este impacto usando el fetch de bloque. Un fetch de bloque implica que se mandan múltiples filas o bien registros de manera conjunta desde el servidor al cliente del servicio. El usuario guarda el bloque de fila en un búfer local y recobra las filas desde exactamente el mismo hasta el momento en que el búfer está vacío.


Los cursores reservan recursos en el servidor, como por poner un ejemplo locks, packages, procesos, almacenaje temporal, etcétera Por servirnos de un ejemplo, Microsoft SQL Server incorpora los cursores creando una tabla temporal y rellenándola con los datos de la consulta. Si un cursor no se cierra correctamente, el recurso no va a ser liberado hasta el momento en que la sesión SQL (conexión) sea cerrada. Este desperdicio de recursos en el servidor puede llevar no solo a una humillación del desempeño, sino más bien asimismo a fallos más graves.


  ELIGE TU TEMA DE INTERÉS: 


autoayuda.es   Internet y Tecnologias 

Está aquí: Inicio > [ INTERNET ] > ıllı Cursor (base de datos) wiki: info, historia y vídeos

Las cookies nos permiten ofrecer nuestros servicios. Al utilizar nuestros servicios, aceptas el uso que hacemos de las cookies. Ver políticas