martes, 13 de noviembre de 2018

bloques anonimos

Uso y ejemplo de bloques anónimos 

Bloques anónimos

Los bloques anónimos no tienen nombre.Se suelen crear y ejecutar desde SQL*Plus. Oracle reconoce el comienzo del bloque cuando encuentra DECLARE o BEGIN.El bloque del buffer se puede guardar en un fichero con la orden.

SQL>SAVE nombrefichero [REPLACE].

Para cargar un bloque de un fichero en el buffer SQL se hará:

SQL>GET nombrefichero,una vez cargado se puede ejecutar con RUN

También se puede cargar y ejecutar con una sola orden:

SQL>START nombrefichero

Estos son algunos ejemplos de bloques PL/SQL anónimos:

1.El siguiente bloque no hace nada:

Script

SET SERVEROUTPUT ON
 BEGIN
NULL;
END;
/

2.El siguiente bloque escribe "HOLA MUNDO".


Script

BEGIN
 DBMS_OUTPUT.PUT_LINE('HOLA MUNDO');
END;
/

3. El bloque siguiente muestra la descripción de un articulo: 

Script

DECLARE
v_descrip varchar(30);
BEGIN
  SELECT descrip INTO v_descrip
FROM product
WHERE prodid=100860;
 DBMS_OUTPUT.PUT_LINE(v_descrip);
END;
/

En los bloques se pueden utilizar variables de sustitución anteponiendo el a la variable. Antes de ejecutar el bloque se solicitará el valor de la variable:

Script


DECLARE


 v_nom CUSTOMER.NAME%TYPE;

BEGIN
  SELECT name INTO v_nom
  FROM customer
  WHERE custid=&v_id;
 DBMS_OUTPUT.PUT_LINE(v_nom);
END;
/

Uso de procedimientos



El procedimiento se encuentra almacenado en el servidor de base de datos y puede ser invocado mediante la orden EXECUTE

SET SERVEROUTPUT ON
EXECUTE ver_cliente('JOCKSPORT')


SCRIPT COMPLETO

CREATE OR REPLACE
  PROCEDURE ver_cliente(nomcli VARCHAR2)
  AS
  idcli NUMBER(6);
  domcli VARCHAR2(40);
 BEGIN
  SELECT custid,address INTO idcli,domcli
   FROM customer
   WHERE name=nomcli;
 DBMS_OUTPUT.PUT_LINE('Nombre: '||nomcli||'Nif: '||idcli||'Domicilio: '||domcli);

 EXCEPTION

  WHEN NO_DATA_FOUND THEN
  DBMS_OUTPUT.PUT_LINE('No se encontro cliente'||nomcli);

END ver_cliente;


uso de cursores

Uso de cursores 

En PL/SQL el resultado de una consulta no va directo al terminal del usuario,si no que se guarda en un área de memoria ala que se accede mediante una estructura denominada cursores

Ejemplo:

Gestión de excepciones


Las excepciones sirven par tratar los errores y mensajes de las diversas  herramientas. Oracle tiene determinadas excepciones correspondientes algunos de los errores mas comunes,como por ejemplo:
NO_DATA_FOUND.Una orden de tipo SELECT INTO no ha devuelto ningun valor.
TOO_MANY_ROWS.Uuna orden SELECT INTO ha devuelto mas de una fila.

Se dispararan automaticamente al produccirse los errores asociados.El ejemplo anterior con gestion de excepciones seria:

DECLARE

v_ename VARCHAR(10);
  v_job VARCHAR(10);
  
 BEGIN
 SELECT ename,job INTO v_ename,v_job
   FROM EMP WHERE empno=7902;
   DBMS_OUTPUT.PUT_LINE(v_ename||'*'||v_job);
EXCEPTION
  WHEN NO_DATA_FOUND THEN
  insert into temp(col1) values('Error no hay datos');
WHEN TOO_MANY_ROWS THEN
  insert into temp(col1) values('Error demasiados datos');
WHEN OTHER THEN
  RAISE_APPLICATION_ERROR(-2000,'Error en la aplicacion');
END;
/

Estructura Modular

En esta aproximación podemos distinguir los siguientes tipos de programas:
  • BLOQUES ANÓNIMOS. No tienen nombre.La zona de declaraciones empieza con DECLARE
  • SUBPROGRAMAS. Son bloques que tienen nombre.La zona de declaraciones comienza con IS.A  su vez pueden ser de dos tipos:

-PROCEDIMIENTOS 
Su formato es el siguiente:
PROCEDURE<nombre del procedimiento>
[(<lista de parámetros>)]
IS
[<declaración de objetos locales>;]
BEGIN
<instrucciones>;
[EXCEPTION
<excepciones>;]
END[<nombreprocedimiento>];

-FUNCIONES.Su formato genérico es similar al de los procedimientos,pero estos pueden devolver un valor.


miércoles, 24 de octubre de 2018


Definición de datos compatibles con SQL


PL/SQL dispone de tipos de datos compatibles con las columnas de las tablas: NUMBER, VARCHAR2, DATE, etc.. Las de claraciones de los datos deben realizarse en la seleccion de declaraciones:


DECLARE


importeNUMBER(8,2);
contador number(2);
nombre CHAR (20) NOT NULL :="MIGUEL";
nuevo VARCHAR2 (15);
BEGIN...

PL/SQL permite declarar una variable del mismo tipo de otra mediante el atributo%TYPE.Ejemplo:


nombreActual Empleados.Nombre%TYPE.


Tambien se puede declarar una variable para guardar una fila completa de
una tabla mediante el atributo %ROWTYPE


Ejemplo:


miFila Empleados%ROWTYPE.



Estructuras de Control


Las estructuras de control de PL/SQL son las habituales de los lenguajes de
programación estructurados IF,WHILE,FOR y LOOP.
Estructuras de control alternativas
IF<condicion>THEN
   instrucciones;
   ...
END IF;
IF<condicion>THEN
   instrucciones;
   ...
ELSE
   instrucciones;
   ...
END IF;
IF<condicion>THEN
   instrucciones;
   ...
ELSIF<condicion>THEN
   instrucciones;
   ...
ELSIF<condicion>THEN
   instrucciones;
   ...
ELSE
   instrucciones;
   ...
END IF;
Introducción al lenguaje PL/SQL

Oracle incorpora un gestor PL/SQL en el  servidor de la base de datos y en las principales herramientas (Forms,Reports,Graphics,etc.) Este lenguaje basado en el lenguaje ADA incorpora todos los lenguajes de tercera generación: manejo de variables, estructura modular (procedimientos y funciones), estructuras de control (bifurcaciones, bucles y demás estructuras). Control de excepciones, así como una total integración en el entorno Oracle   

EL uso del lenguaje PL/SQL es también imprescindible para construir disparadores de base de datos que permitan implementar reglas complejas de negocio y auditoría de la base de datos.



Características del lenguaje


Este esta diseñado por oracle para trabajar con la base de datos. Este soporta los comandos de consulta y manipulación de datos  aportando al lenguaje SQL las estructuras de control (bucles, bifurcaciones, etc.) 

Bloques PL/SQL

Con PL/SQL se pueden construir distintos tipos de programa:procedimientos, funciones, etc;todos ellos tienen en común una estructura básica característica del lenguaje denominada BLOQUE 

Un bloque tiene tres zonas claramente definidas:
  • Una zona de declaraciones  donde se declaran objetos (variables,constantes, etc.) locales. Suele ir precedida por la cláusula DECLARE (o IS/AS en los procedimientos y funciones)
  • Un conjunto de instrucciones procedido por la cláusula BEGIN
  • Una zona de tratamiento de excepciones precedido por la cláusula EXCEPTION. Esta zona, igual que la de declaraciones, es opcional.
En el siguiente ejemplo se borra el departamento numero 20, pero antes se crea un departamento provisional, al que se asigna los empleados del departamento que se va a borrar.



Para verificar que se ejecuto correctamente aremos un SELECT a la tabla.