Base de Datos Oracle: desarrollo de aplicaciones



Documentos relacionados
Introducción al SQL embebido

Seminario 1. Conexión a Oracle

Desarrollo Cobol/DB2

SQL Embebido. Introducción (I)

SQL EMBEBIDO FELIPE GARCÍA GÓMEZ

Motivación: SQL Interactivo vs. No Interactivo

Sintaxis: CURSOR nombre_cursor[(param1 [IN] tipo1,... )] IS consulta ;

INTRODUCCIÓN INTRODUCCIÓN INTRODUCCIÓN INTRODUCCIÓN INSTRUCCIONES DE DEFINICIÓN DE TABLAS E ÍNDICES INSTRUCCIONES DE DEFINICIÓN DE TABLAS E ÍNDICES

Escuela Politécnica Superior de Ingeniería Departamento de Ingeniería Informática

Permite definir cada relación que pertenece a la base de datos relacional, incluyendo:

Revista Electrónica Granma Ciencia. Vol.10, No.2, Mayo - Agosto de 2006 ISSN X

CONCEPTOS DE PROCESAMIENTO DE TRANSACCIONES

El Lenguaje PL/SQL. Un lenguaje de propósito general orientado a la inclusión de sentencias SQL. Estructura del código PL/SQL.

Bases de Datos 3º Informática de Sistemas

PL/SQL. Con PL/SQL vamos a poder programar las unidades de programa de la base de datos Oracle:

accesos a una base de datos desde un programa escrito en un lenguaje de alto nivel (C, Pascal, COBOL,...). Nosotros vamos a utilizar SQL inmerso en C

Fundamentos de la Programación

Los paquetes tienen dos partes: una especificación y un cuerpo que están almacenados por separado en la base de datos.

Son objetos cuya función es el tratamiento de varios registros exclusivamente durante la ejecución de un programa.

Oracle básico (IV): Programación en PL/SQL

myappgen Usted Construye la aplicación mientras la ejecuta

Sistemas de Datos Curso: Ernesto Chinkes. Subconsultas Stored Procedures - Triggers

Esta extensión está obsoleta a partir de PHP 5.5.0, y será eliminada en el futuro

TEMA 3: EL LENGUAJE C: PRESENTACIÓN

Base de Datos Oracle: desarrollo de aplicaciones

Tema: Arreglos de Objetos en C++.

Estándar de desarrollo de aplicaciones del Govern de les Illes Balears

Figura 4.1 Clasificación de los lenguajes de bases de datos

3 Consultas y subconsultas

Modulo 1 El lenguaje Java

BASES DE DATOS AVANZADAS Transacciones en MYSQL

El usuario puede utilizar esta tabla derivada como una tabla más, en sus consultas.

Iniciando con Oracle. Índice de contenido. Ingresando a Oracle. Cambiando Su Contraseña. Ingresando un Comando SQL en SQL*Plus

BANCO DE PREGUNTAS PARA EVALUACIÓN DE CONOCIMIENTOS DEL CONCURSO DE MÉRITOS Y OPOSICIÓN EXPERTO EN DESARROLLO DE SISTEMAS 1

SQL (Structured Query Language)

Lic. Vladimir Cotaquispe Gutierrez PROGRAMACIÓN PL/SQL I - 1. Copyright 2008, Oracle. All rights reserved.

Ataques a Aplicaciones de Bases de Datos

LENGUAJE. Tema 1 - Introducción

Práctica 3 de Redes de Área Local Cliente y Servidor de ficheros concurrente

INTRODUCCIÓN AL TIPO COMPUESTO CADENA CONTENIDOS

LINUX - Los archivos de órdenes I

Manipulando Datos. y Transacciones

Dev C++. Compilador de C para Windows

Tablas internas 1-12

SQL*Plus. Capítulo Conexión y desconexión a una base de datos

Programación SQL. Lucio Salgado Diciembre 2008

PL/SQL. DECLARE /* Parte Declarativa */ BEGIN /* Parte de Ejecución */ EXCEPTION /* Parte de Excepciones */ END;

Oracle básico (y VI): SQLMenu. Definiciones. Softdownload.com.ar

TEMA 6: MODIFICACIÓN DE LA BASE DE DATOS EN SQL

Base de datos relacional

BASES DE DATOS TEMA 2. Arquitectura de un Sistema de Gestión de Bases de Datos

LABORATORIO 10. Concurrencia y bloqueos en el SMBD Oracle

Que es Velneo vdataclient V7?

Recursos de Aprendizaje

INSTALACIÓN DE GOLDMINE PREMIUM PASO A PASO CREACIÓN DE UNA NUEVA BASE DE DATOS EN GOLDMINE PREMIUM PASO A PASO

Oracle Database 10g: Taller de Administración I 1-2

Procesamiento Condicional con Sentencias IF Procesamiento Condicional con Sentencias CASE Sentencia Loop Simple Sentencia WhileLoop Sentencia ForLoop

Organización de Computadoras

Entorno de Programación Visual Studio 6

Tema: Procedimientos almacenados y cursores. Facultad : Ingeniería Escuela : Computación Asignatura: SQL SERVER. GUÍA 2 Pág. 1

QUÉ ES UNA BASE DE DATOS Y CUÁLES SON LOS PRINCIPALES TIPOS? EJEMPLOS: MYSQL, SQLSERVER, ORACLE, POSTGRESQL, INFORMIX (DV00204A)

Bases de Datos Relacionales

Arrays y Cadenas en C

Programación estructurada (Interfaces Windows y Unix)

Lenguaje de manipulación de datos

SISTEMAS OPERATIVOS AVANZADOS

vgestorweb vgestorweb 1/9

Se guardan en archivos con extencion c y los cabezales con extension h

Universidad Nacional del Sur Departamento de Ciencias e Ingeniería de la Computación Elementos de Bases de Datos 2do. Cuatrimestre de 2004

Procedimientos, Funciones, Trigger y Cursores en ORACLE

TEMA 5. CONTROL DE FLUJO DEL PROGRAMA. Sentencia Instrucción Expresión Operadores + Operandos Sintaxis: Sentencia ;

Introducción al Dev-C++

CURSORES EN SQL SERVER

Base de datos Lenguaje SQL

Oracle Básico PL/SQL

A25. Informática aplicada a la gestión Curso 2005/2006 Excel Tema 7. Funciones avanzadas de Excel II

MASTER EN INGENIERÍA DEL HORMIGÓN

Administración Básica de Oracle10g

PRACTICA 6.6 VPN Logmein Hamachi registrarse en la página instalación,

sql*plus es un programa de linea de comandos de oracle que puede ejecutar comandos sql y pl/sql de forma interactiva o mediante un script.

Memoria compartida y semáforos r/w. La página del manual que podría servir para describir estas funciones es la siguiente:

CONSULTAS MULTITABLAS SQL SERVER Manual de Referencia para usuarios. Salomón Ccance CCANCE WEBSITE

Asignatura: Administración de Bases de Datos. Pedro P. Alarcón Cavero

SISTEMAS INFORMÁTICOS EN TIEMPO REAL 2º Ingeniería Industrial MANUAL DE HERRAMIENTAS SOFTWARE PARA PROGRAMACIÓN EN UNIX

TEMA 20: CONCEPTOS BÁSICOS DE SQL

Tema: Sobrecarga de Operadores.

Un nombre de usuario de 30 caracteres o menos, sin caracteres especiales y que inicie con una letra.

Formatos para prácticas de laboratorio

El Modo SQL de Emacs

EXTENSIÓN DE UML PARA APLICACIONES WEB

Tutorial Oracle SQL Developer 1.2.1

Tareas para reemplazar un disco de estado sólido (SSD)

Gabinetes Dell Storage MD1400 y MD1420 Guía de implementación

Descarga Automática. Manual de Usuario. Operador del Mercado Ibérico de Energía - Polo Español Alfonso XI, Madrid

Contenidos. Gestión dinámica de memoria. Gestión dinámica de memoria. Introducción. 1. Introducción 2. El operador NEW 3. El operador DELETE

Guía de instalación de Gesclivet.

Contenido. Capítulo 1. Introducción a lenguaje C 1

ANÁLISIS TEÓRICO/PRÁCTICO DE LA TRADUCCIÓN DE: INFORMIX-4GL A JAVA ÁNGEL SUÁREZ GARCÍA JUNIO DE 2008

LEER Y ESCRIBIR ARCHIVOS O FICHEROS EN C. FOPEN, FCLOSE, MODOS DE ACCESO READ, WRITE Y APPEND (CU00536F)

MATERIAL 2 EXCEL 2007

Transcripción:

Base de Datos Oracle: desarrollo de aplicaciones Oracle Pro-C/C++ Contenidos Introducción Compilación Código incrustado Comunicación de variables Conexión Transacciones Control de errores Llamadas a procedimientos almacenados Más sobre el pre-compilador jul-04 Alberto M.F.A. alb@lsi.uniovi.es 2

Características Se escribe todo en C/C++ Precompila SQL, valida sintaxis antes de ejecutar Se puede emplear cualquier sentencia SQL y PL/SQL Permite Threading Conversión de tipos C a Oracle jul-04 Alberto M.F.A. alb@lsi.uniovi.es 3 Características Permite conexión simultanea a varios servidores Control cómodo de errores Soporta tipos objeto, LOBS, CLOBS Puede interactuar con OCI jul-04 Alberto M.F.A. alb@lsi.uniovi.es 4

Contenidos Introducción Compilación Código incrustado Comunicación de variables Conexión Transacciones Control de errores Llamadas a procedimientos almacenados Más sobre el pre-compilador jul-04 Alberto M.F.A. alb@lsi.uniovi.es 5 Compilación Exec jul-04 Alberto M.F.A. alb@lsi.uniovi.es 6

Compilación detallada.h.h <<includes>>.pc PROC.c VC++.exe 01010 10101 11001 Preproceso Compilación 01010 10101 11001 Linkage.tmp.obj 01010 10101 11001.lib jul-04 Alberto M.F.A. alb@lsi.uniovi.es 7 Compilación MVC++ 6.0 Librerías solo para MSVC++ 6.0 El preprocesador proc.exe en %ORA_HOME%\bin Linkar con orasql8.lib y orasqx8.lib en %ORA_HOME%\precomp\lib\msvc jul-04 Alberto M.F.A. alb@lsi.uniovi.es 8

Ficheros de inclusión Es necesario incluir en nuestro código: #include <oci.h> #include <sqlca.h> /*SQL Communications Area*/ <oci.h> está en %ORA_HOME%\oci\include <sqlca.h> está en %ORA_HOME%\precomp\public jul-04 Alberto M.F.A. alb@lsi.uniovi.es 9 Invocación de proc.exe proc parse=full varios modos iname=$(inputname).pc oname=$(inputname).c include= %ORA_HOME%\oci\include" include= %ORA_HOME%\precomp\public" include="$(msdevdir)\..\..\vc98\include Tiene más opciones ver: $>proc -h jul-04 Alberto M.F.A. alb@lsi.uniovi.es 10

Integración con VC++ Sobre <fichero>.pc Botón derecho ratón Settings... Seleccionar Custom build Cuadro Commands... %ORA_HOME%\bin\proc.exe parse=full... Cuadro Outputs... $(InputName).c Así para cada fichero.pc Incluir en el proyecto los generados.c jul-04 Alberto M.F.A. alb@lsi.uniovi.es 11 Project Settings en VC++ jul-04 Alberto M.F.A. alb@lsi.uniovi.es 12

Línea de comando para precompilación sencila %ORA_HOME%\bin\proc.exe parse=full iname=$(inputname).pc oname=$(inputname).c include="%ora_home%\oci\include include="%ora_home%\precomp\public include="$(msdevdir)\..\..\vc98\inc lude include="." jul-04 Alberto M.F.A. alb@lsi.uniovi.es 13 Estructura de ejecución Código.PC Código Pro-C/C++ SQLLIB OCI Net8 Interfaz propietario, no documentado jul-04 Alberto M.F.A. alb@lsi.uniovi.es 14

Contenidos Introducción Compilación Código incrustado Comunicación de variables Conexión Transacciones Control de errores Llamadas a procedimientos almacenados Más sobre el pre-compilador jul-04 Alberto M.F.A. alb@lsi.uniovi.es 15 Código SQL incrustado Estructura: EXEC SQL <sentencia SQL> ; Se puede insertar en cualquier parte Se pueden referenciar variables del programa host jul-04 Alberto M.F.A. alb@lsi.uniovi.es 16

Código PL/SQL incrustado EXEC SQL EXECUTE DECLARE... BEGIN... END; END-EXEC; jul-04 Alberto M.F.A. alb@lsi.uniovi.es 17 Reglas para código incrustado Admite comentarios C y SQL Strings en SQL con y NO Código C (prototipos de función): MODE=CPP C++ MODE=KR_C Kernighan y Ritchie MODE=ANSI_C Continuación strings EXEC SQL... \ jul-04 Alberto M.F.A. alb@lsi.uniovi.es 18

Contenidos Introducción Compilación Código incrustado Comunicación de variables Conexión Transacciones Control de errores Llamadas a procedimientos almacenados Más sobre el pre-compilador jul-04 Alberto M.F.A. alb@lsi.uniovi.es 19 Variables host Cualquier escalar o array Son de lectura/escritura para SQL y el programa host Esta asociación se denomina binding En C se referencian por el <nombre> En SQL por :<nombre> El nombre debe ser idéntico jul-04 Alberto M.F.A. alb@lsi.uniovi.es 20

Ejemplo variables host int nempleado; //Esto es C... EXEC SQL SELECT //Esto es PRO-C NVL(MAX(empno), 0) INTO :nempleado FROM emp;... if (nempleado <> 0) // Esto es C {... jul-04 Alberto M.F.A. alb@lsi.uniovi.es 21 Declare Section Declare Section: EXEC SQL BEGIN DECLARE SECTION; char *uid = "scott/tiger";... EXEC SQL END DECLARE SECTION; Necesaria si CODE=CPP o MODE=ANSI o PARSE=NONE o PARSE=PARTIAL jul-04 Alberto M.F.A. alb@lsi.uniovi.es 22

Indicadores Avisan de NULL y truncamientos char emplname[14]; char empljob[10]; short indjob; // Indicador EXEC SQL FETCH c INTO :emplname, :empljob:indjob; jul-04 Alberto M.F.A. alb@lsi.uniovi.es 23 Indicadores Son de entrada/salida Pueden usarse arrays como variables Si se necesitan indicadores, otro array de la misma dimensión con solo indicadores int vector[5]; //Valores int ind[5]; //Indicadores EXEC SQL INSERT INTO tbl (val) VALUES :vector:ind; jul-04 Alberto M.F.A. alb@lsi.uniovi.es 24

Indicadores, valores 0 Todo correcto -1 Valor leído/escrito es NULL -2 Truncamiento no determinable >0 Truncamiento, la longitud inicial es el valor jul-04 Alberto M.F.A. alb@lsi.uniovi.es 25 Cursores Para las SELECT que devuelvan una sola fila no hace falta declararlos Para las SELECT múltiples si jul-04 Alberto M.F.A. alb@lsi.uniovi.es 26

Ejemplo Cursores EXEC SQL DECLARE <nombre> CURSOR FOR <sql>;... EXEC SQL OPEN c; EXEC SQL WHENEVER NOT FOUND DO break; while(more_rows) { EXEC SQL FETCH c INTO <binded vars>... Proceso... } EXEC SQL CLOSE c; jul-04 Alberto M.F.A. alb@lsi.uniovi.es 27 Contenidos Introducción Compilación Código incrustado Comunicación de variables Conexión Transacciones Control de errores Llamadas a procedimientos almacenados Más sobre el pre-compilador jul-04 Alberto M.F.A. alb@lsi.uniovi.es 28

Abrir la conexión EXEC SQL CONNECT :user_pass; EXEC SQL CONNECT :user IDENTIFIED BY :password; EXEC SQL CONNECT :user IDENTIFIED BY :password ALTER AUTHORIZATION :newpass; jul-04 Alberto M.F.A. alb@lsi.uniovi.es 29 Conexión automática OP$<username> <username> en el S.O. Trata de conectar automáticamente si: Si opción de proc.exe AUTO_CONNECT=YES O en código char *oraid = / ; Solo 1 char EXEC SQL CONNECT :oraid; jul-04 Alberto M.F.A. alb@lsi.uniovi.es 30

Cerrar la conexión EXEC SQL COMMIT RELEASE; Si el programa acaba sin COMMIT todo el trabajo perdido EXEC SQL ROLLBACK RELEASE; Si se detecta error grave jul-04 Alberto M.F.A. alb@lsi.uniovi.es 31 Contenidos Introducción Compilación Código incrustado Comunicación de variables Conexión Transacciones Control de errores Llamadas a procedimientos almacenados Más sobre el pre-compilador jul-04 Alberto M.F.A. alb@lsi.uniovi.es 32

Transacciones Cada sentencia inicia una implícitamente Las sentencias DDL inician y terminan implícitamente Las sentencias DML hacen COMMIT o ROLLBACK cuando: EXEC SQL COMMIT/ROLLBACK [WORK]; Se inicia detrás una sentencia DDL jul-04 Alberto M.F.A. alb@lsi.uniovi.es 33 Transacciones Cuando el programa para por fallo software o hardware... Se produce un ROLLBACK automático Todo las escrituras que haga el programa están dentro de una ÚNICA transacción hasta que se hace COMMIT o ROLLBACK Hacerlo con frecuencia Excepción: Si por el medio se mete DDL jul-04 Alberto M.F.A. alb@lsi.uniovi.es 34

SavePoints Dentro de una transacción compleja: EXEC SQL SAVEPOINT start_delete; EXEC SQL DELETE FROM...; EXEC SQL ROLLBACK TO SAVEPOINT start_delete; jul-04 Alberto M.F.A. alb@lsi.uniovi.es 35 Contenidos Introducción Compilación Código incrustado Comunicación de variables Conexión Transacciones Control de errores Llamadas a procedimientos almacenados Más sobre el pre-compilador jul-04 Alberto M.F.A. alb@lsi.uniovi.es 36

Control de errores Dos mecanismos: Uso de la SQLCA Si es necesaria más información también se usa ORACA Uso de la sentencia WHENEVER jul-04 Alberto M.F.A. alb@lsi.uniovi.es 37 SQLCA Es una struct C que almacena status de operaciones Inclusión, dos alternativas: EXEC SQL INCLUDE SQLCA; #include <sqlca.h> jul-04 Alberto M.F.A. alb@lsi.uniovi.es 38

Contenido de SQLCA Entre otras cosas... sqlca.sqlcode 0 si OK, >0 NO_DATA, <0 Error grave sqlca.sqlerrm.sqlerrmc mensaje de error sqlca.sqlerrm.sqlerrml longitud err. mens sqlca.sqlerrd[2] nº de filas procesadas sqlca.sqlerrd[4] nº de columna error parse sqlca.sqlwarm[0..7] varios warms jul-04 Alberto M.F.A. alb@lsi.uniovi.es 39 WHENEVER EXEC SQL WHENEVER <condition> <action>; Condiciones: SQLWARNING consultar SQLCA SQLERROR NOT FOUND última fila, no hay filas jul-04 Alberto M.F.A. alb@lsi.uniovi.es 40

Acciones WHENEVER CONTINUE DO <expresion_lenguaje> DO BREAK DO CONTINUE GOTO <label> STOP jul-04 Alberto M.F.A. alb@lsi.uniovi.es 41 Ejemplos WHENEVER EXEC SQL WHENEVER NOT FOUND DO handle_error(); EXEC SQL WHENEVER SQLWARNING CONTINUE; EXEC SQL WHENEVER SQLERROR GOTO finaliza; jul-04 Alberto M.F.A. alb@lsi.uniovi.es 42

Ejemplos WHENEVER EXEC SQL WHENEVER NOT FOUND DO break; while(more_rows) { EXEC SQL FETCH c INTO :emplname, :empljob:indjob;... Proceso... } jul-04 Alberto M.F.A. alb@lsi.uniovi.es 43 Ámbito WHENEVER Su ámbito es posicional, no lógico Vigila todas las sentencias que físicamente siguen en el código No vigila el flujo del programa! Una WHENEVER está activa hasta que otra la revoca Buena práctica: Una antes de cada SQL a vigilar jul-04 Alberto M.F.A. alb@lsi.uniovi.es 44

Contenidos Introducción Compilación Código incrustado Comunicación de variables Conexión Transacciones Control de errores Llamadas a procedimientos almacenados Más sobre el pre-compilador jul-04 Alberto M.F.A. alb@lsi.uniovi.es 45 Llamada a P/F almacenados Dos métodos CALL BEGIN... END CALL cómodo para llamar a procedimientos y funciones BEGIN... END única forma si el procedimiento devuelve un cursor jul-04 Alberto M.F.A. alb@lsi.uniovi.es 46

CALL EXEC SQL CALL [schema.] [package.]stored_proc[@db_link]( arg1,...) [INTO :ret_var [[INDICATOR]:ret_ind]] ; jul-04 Alberto M.F.A. alb@lsi.uniovi.es 47 Ejemplo call... int num, fact;... EXEC SQL CALL mathpkge.fact(:num) INTO :fact ;... jul-04 Alberto M.F.A. alb@lsi.uniovi.es 48

BEGIN... END EXEC SQL EXECUTE BEGIN raise_salary(:emp, :increase); END; END-EXEC; jul-04 Alberto M.F.A. alb@lsi.uniovi.es 49 Procedimientos y cursores Variable de tipo SQL_CURSOR Se inicializa (allocate) Se le pasa el proc almacenado Se recorren todas las filas Se cierra Se libera jul-04 Alberto M.F.A. alb@lsi.uniovi.es 50

Ejemplo Procs y cursores (1) SQL_CURSOR crsr; EXEC SQL ALLOCATE :crsr; EXEC SQL EXECUTE BEGIN proc(:id, :crsr); END; END-EXEC; jul-04 Alberto M.F.A. alb@lsi.uniovi.es 51 Ejemplo Procs y cursores (y 2) EXEC SQL WHENEVER NOT FOUND... while(more_rows) { EXEC SQL FETCH :crsr INTO... } EXEC SQL CLOSE :crsr; EXEC SQL FREE :crsr; jul-04 Alberto M.F.A. alb@lsi.uniovi.es 52

Contenidos Introducción Compilación Código incrustado Comunicación de variables Conexión Transacciones Control de errores Llamadas a procedimientos almacenados Más sobre el pre-compilador jul-04 Alberto M.F.A. alb@lsi.uniovi.es 53 Compilación detallada #INCLUDE.h.h PROC.pc.c VC++.exe 01010 10101 11001 Preproceso.tmp Compilación 01010 10101 11001.obj Linkage 01010 10101 11001.lib jul-04 Alberto M.F.A. alb@lsi.uniovi.es 54

Precompilación condicional Como la precompilación normal del compilador pero para Pro-C jul-04 Alberto M.F.A. alb@lsi.uniovi.es 55 Ficheros de inclusión C Pro-C interpreta la mayoría de las directivas del preprocesador C del compilador. #define, #ifdef,... NO interpreta: #pragma, #error, #line, #, ## jul-04 Alberto M.F.A. alb@lsi.uniovi.es 56

Opciones del precompilador Muchas opciones se pueden dar desde la línea de comandos de proc.exe También se pueden ajustar en código EXEC ORACLE OPTION(<opc>=<val>); Está en efecto hasta que aparece otra OPTION en el mismo fichero. No pasan de un fichero a otro. jul-04 Alberto M.F.A. alb@lsi.uniovi.es 57 Opciones si se usa PL/SQL...... o se desea chequeo estricto Más opciones en la línea de comandos: %ORA_HOME%\proc.exe... SQLCHECK=SEMANTICS USERID=user/pass@instance Para solo algunas partes de código: EXEC ORACLE OPTION(SQLCHECK=SEMANTICS) PROC chequea contra el diccionario de datos Se conecta con el servidor para precompilar El servidor debe estar on-line! jul-04 Alberto M.F.A. alb@lsi.uniovi.es 58

Algunas opciones jul-04 Alberto M.F.A. alb@lsi.uniovi.es 59