Trbajo para 10 sobre sql

Solo disponible en BuenasTareas
  • Páginas : 21 (5223 palabras )
  • Descarga(s) : 0
  • Publicado : 29 de septiembre de 2010
Leer documento completo
Vista previa del texto
El lenguaje SQL como lenguaje Huésped
El lenguaje SQL puede actuar como si fuera un lenguaje huésped, es decir, que puede interactuar dentro de un lenguaje distinto como puede ser el cobol, el visual Basic, el C++, etc.
Un ejemplo de esto en c sería:
#include
EXEC SQL BEGIN DECLARE SECTION;
CHAR dni[6];
CHAR cod_cli[7];
CHAR user_name[7];
CHAR password[8];
FLOAT cuota;
EXEC SQL ENDDECLARE SECTION;
VOID sql_error ( );
MAIN ( ){
EXEC SQL WHENEVER sqlerror DO sql_error (“Error Oracle”)......
EXEC SQL CONNECT :username IDENTIFY BY :password;
EXEC SQL SELECT cod_cli INTO :cod_cli FROM clientes WHERE dni = :dni;... ...
EXEC SQL COMMIT RELEASE;
EXIT(0) }
VOID sql_error (CHAR *msg) {
PRINTF (“\N%S”,msg)
EXEC SQL ROLLBACK RELEASED
EXIT(1); }
El oracle mantiene una variablellamada SQLSTATE en la cual guarda códigos de retorno cuando se interactúa con el. De esta forma se puede saber si se ha producido un error a la hora de manejar el oracle. Otras variables de este tipo son SQLCODE y SQLERR.
Para hacer el control de errores se ha escrito la línea:
EXEC SQL WHENEVER sqlerror DO sql_error (“Error Oracle”)
Con esta línea le especificamos al oracle que en el momentoen el que ocurra un error ejecute la función SQL_ERROR. También le podíamos haber dicho que hiciera otras cosas como:
• CONTINUE
• GOTO etiqueta
• Función
También se puede controlar con esta sentencia que cuando no halla error haga algo, cambiando SQLERROR por NOTFOUND después de la palabra WHENEVER.
El nombre de las variables que van a intervenir en las sentencias de SQL van siempreprecedidas por el carácter `:'. A la hora de hacer un select tenemos que especificarle a donde van a ir a parar las filas que son el resultado. Para ello tenemos la palabra INTO, con el cual le especificamos a donde va a ir el resultado del select.
CURSORES
A la hora de hacer un select en el cual llegan muchas filas tenemos el objeto cursor.
#include
EXEC SQL BEGIN DECLARE SECTION
CHAR USERNAME[7];CHAR DNI[9]
FLOAT CUOTA;
EXEC SQL END DECLARE SECTION;
EXEC SQL DECLARE socios CURSOR FOR
SELECT cod_cli, cuota FROM clientes
ORDER BY cuota;... ...
EXEC SQL OPEN socios;
FOR (I=1;Iv_cuota;
Cuando se declara un cursor se puede al mismo tiempo declarar las variables que utiliza el mismo cursor:
DECLARE
CURSOR nombre_cursor [variable tipo [:=valor]] IS SELECT ....
Ejemplo:
CURSOR c1(cuota _ mínima NUMBER) IS SELECT descripción FROM actividades WHERE cuota > cuota _ mínima;
Después a la hora de abrir el cursor se tendrá que incluir los valores para esas variables:
OPEN c1 (5000);
En el caso de que sean varias las variables los valores en la llamada irán separados por `,'.
Atributos
Hay cuatro atributos diferentes cuando se trabaja con cursores y que podemos utilizar:%NOTFOUND: Este cursor devuelve el valor TRUE cuando al ejecutar una FECTH no se ha encontrado ninguna fila en el resultado. Será falso si el último FETCH ha devuelto una fila. Será NULL cuando se ha hecho un OPEN al cursor pero todavía no se ha hecho ningún FETCH. La sintaxis es:
nombre_cursor%NOTFOUND
Es util para controlar el bucle de lectura de los registros del resultado de un cursor.
LOOPFETCH nombre_cursor INTO variables;
Sentencias;
EXIT WHEN nombre_cursor%NOTFOUND;
END LOOP;
%FOUND: Este atributo devolverá TRUE cuando el último FETCH ha encontrado una fila como resultado y será FALSE cuando no haya devuelto ninguna fila como resultado. Devolverá NULL cuando no se halla ejecutado ningún FETCH desde el último OPEN del cursor que ha sido ejecutado.
LOOP WHILEnombre_cursor%FOUND;
FETCH nombre_cursor INTO variables;
Sentencias;
END LOOP;
%ROWCOUNT: Este atributo devuelve el número de filas recuperadas por el FETCH. Sirve para recuperar un número de filas en concreto. Este número se irá incrementando cada vez que se ejecuta un comando FETCH.
LOOP
FETCH nombre_cursor INTO variables;
Sentencias;
EXIT WHEN nombre_cursor%ROWCOUNT > 100;
END LOOP;
%ISOPEN: Este...
tracking img