PDF de programación - SQL Embebido

Imágen de pdf SQL Embebido

SQL Embebidográfica de visualizaciones

Publicado el 6 de Julio del 2017
1.315 visualizaciones desde el 6 de Julio del 2017
116,7 KB
20 paginas
Creado hace 15a (21/04/2009)
SQL Embebido

Introducción (I)

z SQL directo (o interactivo): las instrucciones se

ejecutan directamente desde el terminal y el resultado
de las consultas se visualiza en el monitor de la
estación.

z SQL embebido: utilizado intercalando sus instrucciones
en el código de un programa escrito en un lenguaje de
programación al que se denomina lenguaje anfitrión
(FORTRAN, COBOL, C, etc.).

2

Introducción (II)

z La forma de construir un programa con SQL
embebido varía dependiendo del lenguaje y
el gestor de BD utilizados

z Nosotros estudiaremos el caso de SQL

embebido en C contra Oracle.

z Oracle ha definido un lenguaje especial para
soportar este tipo de programación: lenguaje
Pro*C

3

Introducción (III)

z SQL embebido en
Oracle: Proceso de
compilación y enlazado
(link) de un programa
Pro*C

4

Introducción (IV)
z Estructura de un programa Pro*C:

Inclusión de cabeceras
Declaración de variables

Declaración de VARIABLES huésped

Comienzo del código del programa

...
Instrucciones propias del lenguaje
CONEXIÓN con la base de datos

...
...

...

Instrucciones de SQL: DML, DDL

+

Instrucciones propias del lenguaje

DESCONEXIÓN de la base de datos
Instrucciones propias del lenguaje

...
...

Fin del código de programa

Índice:
z Sintaxis general de las instrucciones básicas

de SQL embebido

z Sentencias básicas de SQL embebido:

{Declaración de variables
{Control de errores
{Conexión /desconexión de la base de datos
{Consultas (sentencias select)
{Sentencias de modificación de datos: (insert,

update,delete)

{Sentencias de modificación de la BD (create, …)
{Ejecución de sentencias SQL a partir de strings:

SQL dinámico.

5

6

Sintaxis general de las sentencias de
SQL embebido (I)

z En general, cualquier instrucción del SQL interactivo se puede

utilizar en el SQL embebido con pequeñas variaciones
sintácticas.

z Existen, además, instrucciones específicas del SQL para la

gestión de los conjuntos de tuplas obtenidos como resultado de
alguna consulta.

z También: directivas del precompilador: gestión de errores,

delimitación de segmentos de programa, etc.

7

Sintaxis general de las sentencias de
SQL embebido (II)
z Consideraciones generales de sintaxis:

{ Todas las instrucciones del SQL embebido van precedidas

de las palabras reservadas EXEC SQL y finalizan con un
símbolo especial.

{ En el lenguaje Pro*C este símbolo es el punto y coma (;).

EXEC SQL delete from emp;

{ Esta notación permite al precompilador identificar y procesar

estas instrucciones para traducirlas a código C estándar.

8

Declaración de variables (I)

z Las variables del lenguaje que son utilizadas en

instrucciones SQL (variables huéspedes) deben ser
declaradas en una sección especial encabezada y
terminada de la siguiente forma:

EXEC SQL BEGIN DECLARE SECTION;
EXEC SQL END DECLARE SECTION;

...

z Las variables huésped constituyen la única vía de

intercambio de datos entre el programa huésped y la
base de datos.

Declaración de variables (II)
z La declaración y el uso de una variable huésped se realizan en

la forma convencional del lenguaje C:
long empno;

empno = 123;

z Pueden aparecer en una instrucción SQL en cualquier lugar en
el que puede aparecer una expresión o valor del mismo tipo, y
deben ir precedidas del símbolo dos puntos ( : ).
EXEC SQL SELECT * … FROM EMP WHERE EMPNO = :empno;

z No se pueden utilizar para representar a objetos de la base de

datos (nombres de tabla, columna, etc.)
char tabla[] = “emp”;

EXEC SQL SELECT * FROM :tabla

(INCORRECTO!!!)

9

10

Declaración de variables (III)

z Los siguientes tipos utilizados en C pueden ser utilizados

para definir variables huésped:

{ char
{ char[n]
{ int
{ short
{ long
{ float
{ double
{ VARCHAR[n]

Carácter Simple
Cadena de n caracteres (string)
Valor entero
Entero corto
Entero Largo
Valor de punto flotante (precisión sencilla)
Valor de punto flotante (precisión doble)
Cadena de caracteres de longitud variable

z Las variables deben tener un tipo apropiado al uso que se

va a hacer de ellas.

11

Declaración de variables (IV)

• Caso especial: Pseudotipo VARCHAR. Permite almacenar valores del tipo
VARCHAR[n] de SQL.

Declaraciones VARCHAR traducidas por el precompilador de Oracle a un
tipo estándar de C: una estructura

VARCHAR nombre[10]; Ÿ

Struct{
int len;
char arr[10];
} nombre;

/* longitud válida del string */
/* texto del string */

Para imprimir un tipo VARCHAR:

printf("%.*s", nombre.len, nombre.arr);

12

Ejemplo 1 - Enunciado
z Programa que imprime el nombre y comisión de un

empleado a partir de su identificador (numero de
empleado).
Name
---------
EMPNO
ENAME
JOB
MGR
HIREDATE
SAL
COMM
DEPTNO

Type
---------------
NUMBER(4)
VARCHAR2(10)
VARCHAR2(9)
NUMBER(4)
DATE
NUMBER(7,2)
NUMBER(7,2)
NUMBER(2)

Null?
-----------
NOT NULL
NOT NULL
NOT NULL
NOT NULL
NOT NULL
NOT NULL
NOT NULL

Ejemplo 1 - Declaración de variables

/**** Ejemplo1 ****/
/* Inclusión de cabeceras usuales en C */
#include <stdio.h>
#include <string.h>

/* Declaración de variables “huésped", que serán utilizadas en
sentencias SQL */
EXEC SQL BEGIN DECLARE SECTION;

VARCHAR nomemp[10];
float comision;
long num;

EXEC SQL END DECLARE SECTION;

13

14

Control de errores (I)

zMediante la sentencia WHENEVER:

EXEC SQL WHENEVER SQLERROR DO GestionError();

zFormato general:
(Condición)
! SQLERROR
WHENEVER ! SQLWARNING
! NOT FOUND

(Acción)
! DO BREAK
! DO Funcion()
! CONTINUE
! GOTO Etiqueta

15

Control de errores (II)
z Condiciones:

{SQLERROR : Se ha producido un error de SQL.

Ejemplos: error de conexión, violación de una restricción, etc.

{SQLWARNING : Hay un warning o aviso.

Ejemplos: truncado de datos

{NOT FOUND : Ya hemos recuperado todas las tuplas del

resultado de la consulta (usando un cursor).

z Acciones:

{DO BREAK : Si está en un bucle sale de él
{DO Funcion() : Ejecuta la función que se le indica
{CONTINUE : Continúa, ignorando el error
{GOTO Etiqueta : Va la etiqueta indicada

16

Control de errores (III)

z Cuando se ejecuta una sentencia

WHENEVER, tiene efecto hasta el final del
programa o hasta que la siguiente sentencia
WHENEVER.

z Ejemplo:

EXEC SQL WHENEVER SQLERROR DO GestionError();

. . . Sentencias
. . . En esta parte, si hay un error de SQL se
llama a la función GestionError
. . . A partir de aquí, los errores SQL se ignoran

EXEC SQL WHENEVER SQLERROR CONTINUE;

17

Control de errores (IV)
z La sentencia WHENEVER se usa a veces en conjunción con la

estructura SQLCA (SQL Communications Area): guarda el estado de
la última ejecución de una sentencia SQL:

struct sqlca{
char
long
long
struct{

char
long
char
sqlext[8];

char
};
struct sqlca sqlca;

sqlcaid[8];
sqlabc;
sqlcode;
unsigned short sqlerrml;
char
} sqlerrm;
sqlerrp[8];
sqlerrd[8];
sqlwarn[8];

sqlerrmc[70];

{ Sqlcode: Código de resultado. Es 0 si fue correcta
{ Sqlerrm.sqlerrmc: Mensaje de error
{ sqlerrd[2]: Número de filas (tuplas) afectadas por la última

z Necesario incluir el fichero de cabecera <sqlca.h> para poder utilizar
18

sentencia

la variable sqlca.

Ejemplo 1 – Con control de errores

#include <stdio.h>
#include <string.h>
/* Cabeceras de SQL Communication Area, para control de errores, etc. */
#include <sqlca.h>
/* Prototipos de funciones */
void GestionErrores();
/* Declaración de variables “huésped", que serán utilizadas en sentencias SQL */
EXEC SQL BEGIN DECLARE SECTION;
EXEC SQL END DECLARE SECTION;
EXEC SQL WHENEVER SQLERROR DO GestionError();
main(){
...
}
/* En caso de error: mostrar el código y mensaje de error,
void GestionError(){

VARCHAR nomemp[10]; float comision; long num;

se aborta la transacción y se sale del programa */
EXEC SQL WHENEVER SQLERROR CONTINUE;
printf("Error %d\n",sqlca.sqlcode);
printf("Error %s\n",sqlca.sqlerrm.sqlerrmc);
EXEC SQL ROLLBACK WORK RELEASE;
exit(1);

}

19

Conexión/Desconexión
z Antes de efectuar cualquier operación sobre la BDD es

necesario conectarse a la misma:

EXEC SQL CONNECT usuario/pasword;
EXEC SQL CONNECT usuario IDENTIFIED BY password

z Asimismo, para liberar los recursos asociados a la
sesión, es obligatorio desconectarse de la base de
datos antes de que el programa finalice:
EXEC SQL COMMIT [WORK] RELEASE;

z Si se desea terminar deshaciendo la última transacción,

la desconexión se hace de este modo:

EXEC SQL ROLLBACK [WORK] RELEASE;

20

Ejemplo 1 - Conexión

#include <stdio.h>
#include <string.h>
#include <sqlca.h>
/* Prototipos de funciones */
void GestionError();

EXEC SQL BEGIN DECLARE SECTION;

VARCHAR nomemp[10];
float comision;
long num;
char usuario [20] = “scott/tiger”;

EXEC SQL END DECLARE SECTION;
EXEC SQL WHENEVER SQLERROR DO
GestionError();

main(){

EXEC SQL CONNECT :usuario;
...
EXEC SQL COMMIT RELEASE;

}
/* Errores */
void GestionError(){

EXEC SQL WHENEVER SQLERROR CONTINUE;
printf("Error %d\n",sqlca.sqlcode);
printf("Error %s\n",sqlca.sqlerrm.sqlerrmc);
EXEC SQL ROLLBACK RELEASE;
exit(1);

}

Consultas (Selección de datos)
z Las consultas en SQL embebido, aunque similares a sus

equivalentes en SQL interactivo, tienen algunas particularidades.

“Obtener el nombre del empleado cuyo número es 7900”

z En SQL interactivo:

SELECT ENAME

FROM EMP
WHERE EMPNO=7900

Resultado:

ENAME
---------
JAMES

z Con SQL embebido, debemos indicar dónde guardar el valor
obtenido por la consulta, en vez de ser mostrado por pantalla.
z Se emplearán las variables huésped definidas en la DECLARE
SECTION.

21

22

Consultas: Una fila (I)
z La operación de consulta se realiza con la siguiente variante de

la sentencia SELECT del lenguaje SQL interactivo:

SELECT [ALL | DISTINCT] lista_selección
INTO lista_variables
FROM lista_relación
[WHERE condición_búsqueda]
[GROUP BY lista_atributo]
[HAVING condición_búsqueda]

z La sentencia SELECT debe devolver exactamente una fila, en

caso contrario se producirá un error.
la

INTO especifica

z La cláusula

almacenarán los datos seleccionados.

li
  • Links de descarga
http://lwp-l.com/pdf4927

Comentarios de: SQL Embebido (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad