Este un blog que cambio de rumbo... antes era relacionado a "n" temas ahora será exclusivo para detallar todo lo que pude aprender en Oracle =)

sábado, 24 de julio de 2010

DECLARANDO VARIABLES PL/SQL

Las variables pueden ser usadas para almacenar data temporalmente, manipular valores almacenados y reusarlas dentro de los bloques. las variables pueden almacenar cualquier objeto PLSQL, como variables, tipos, cursores y subprogramas(Fx y Px).

Requerimientos para nombrar variables:
- Debe iniciar con una letra.
- Puede incluir letras y números
- Puede incluir caracteres especiales ($, _ y #)
- No puede ser mayor a 30 caracteres.
- No debe incluir palabras reservadas.

Como manejamos las variables en PLSQL?
- Las variables se deben declarar en la sección declarative, puedes declarar una variable asignando un valor inicial y se puede ademas colocar el constraint de NOT NULL .
- se usan y asignan nuevos valores en la sección ejecutable.
-Las variables se utilizan para pasar los parametros a un subprograma(Fx o Px) y ademá sirven para almacenar las respuesta de estos subprogramas.

Sintaxis:
nombre_variable [constant] tipo_dato [not null] [:= valor_default];

Ejemplo:
v_contador number(2) not null := 0;

Otros parametros de la declaración de variables:
CONSTANT: el valor de la variable no puede cambiar.
NOT NULL: es un constraint que indica que la variable debe tener un valor.
DEFAULT : es otra manera de dar un valor por defctoa una variable ( es igual a :=)

En Oracle al imprimir textos literales que contienen el caracter de comilla simple (') se presentan algunos incovenientes lanzandonos un error (ORA-01756: la cadena entrecomillada no está terminada correctamente) , por lo cual oracle permite solucionar esto utilizando :

1. Dobles comillas como se muestra en el siguiente ejemplo:

Select 'Fathers''day'from dual;

y 2. es utilizar "Q o q" con un rango de delimitadores que indica que todo texto que se encuentre dentro de los delimitadores se considera texto literal , por ejemplo:

select q'[father's day ]' from dual;

Ambos ejemplos dan como resultado : Father's day sin ningún error en nuestra consola SQL*PLUS o la herramienta que utilices.


TIPOS DE VARIABLES:

1. Variables PLSQL, pueden ser:

1.1Escalares, almacenan un solo valor y no tienen componentes internos (puede sre un valor booleano). Pueden ser de tipo:

- Char, varchar2, number(p,s), binary_integer, pls_integer, boolean, binary_float, binary_double.
- Date, timestamp, timestamp with time zone, timestamp with local time zone, interval year to month, interval year to second.

*number(p,s): p , puede tomar valores d 1 hasta 38 y s, puede tomar valores de -84 hasta 127.
*pls_integer: requiere menos almacenamiento y es más rápido que los tipo de datos NUMBER
*boolean, almacena tipos de datos :false, true y null. puede utilizar operadores and, or y not .
*timestamp: almacena año, mes, día, hora, minutos , segundos y fracciones d segundos , la precisión de los segundos se encuentra en 6 seg. por default, pero puede ir desde 0 hasta 9 .[timestamp(x)]

Ejemplo:

DECLARE
v_emp_job varchar(100);

1.2.Compuestas, tambien llamada coleccionts, pueden almacenar datos de tipo RECORD , TABLE, NESTED TABLE y VARRAY .
1.3.Referidas, son llamados pointers (punteros) , por que apuntan hacia una localización de almacenamiento.
1.4Large Object (LOB), almacena valores de tipos de datos LOB (CLOB, BLOLB, BFILE y NCLOB), son llamados locators(localizadores), por que especifican la localiación de LOBS que son almacenados fuera de las tablas.

2. Variables NO PLSQL o Bind Variables or Host variables
son creadas en un ambiente diferente a la sección DECLARE de un bloque pl/sql, son creadas con la palabra VARIABLE, son usadas en sentencias sql y PL/SQL . Pueden ser consutadas aun cuando el bloque PL/SQL ya se ejecutó.
Cuando declaras una bind variable number , no puedes indicar la precisión. Para coloarla dentro de un bloque plsql debes colocar :NOMBRE_VARIABLE

sintaxis:
VARIABLE nombre_variable number

sintaxis para imprimir una bind variable:
VARIABLE v_dato number
begin
select salary into :v_dato from employees where employee_id='8';
end;
/
print v_dato

Se puede utilizar:
SET AUTOPRINT ON, Para mostrar automaticamente el valor de la bind variable.

Como declarar variables??
- Cuando declaras una variable PL/SQL debemos evitar colocar el mismo nombre de la columna a la cual hacemos referencia .
- Cuando a una variable no se coloca un valor por defecto , este toma el valor de null.
- Dos variables pueden tener el mismo nombre sólo si son definidos en bloques diferentes.
- Si en la declaración de la variable has colocado al opción de NOT NULL, necesariamente debe tener un valor por default en la declaración.

Declarar variables utilizando el atributo %TYPE
Lo usamos para declarar una variable de cuerdo a una columna definida en la BD o otro variable declarada.
Para declarar un variable con atributo %type , se debe anteponer el nombre de la tabla de la base de datos y el nombre de la columna o el nombre de la variable declarada.
No es aplicable utilizar constraint NOT NULL para variables que utilizan %type

sintaxis:
nombre_variable table.column_name%type;
nombre_variable nombre_variable%type;

PLSQL (Procedural Language extension to SQL) Introducción



Beneficios de PL/SQL
-PL/SQL permite la integración de procedimientos construidos con SQL.Permite especificar no sólo que hacer con un comando SQL , sino como hacerlo, dando un mejor control para su ejecución.
-Mejora la peformance, ya que a través de PLSQL podemos unir varias sentencias SQl en un solo programa, por lo tanto se envía un solo bloque a la BD en lugar de enviar una sentencia SQL a la vez.
-Modularized programa development: la unidad basica en un programa PL/SQL es el bloque.Los Bloques se pueden hallar secuencialmente o se pueden encontrar anidados.
Modularizar consiste en utilizar procedimientos, funciones, paquetes.
-Integración con herramientas, PL/SQL se encuentra integradoi con herramientas como Oracle Forms, Oracle Reports, otros.
-Portable: PLSQL corre en cualquiere servidor Oracle.
-Manejo de Excepciones, permite manejar eficientemente las excepeciones.


Estructura de un Bloque PL/SQL

Tiene 3 secciones :
1.DECLARATIVE
DECLARE (opcional)
-Permite declarar variables, crusores y excepciones

2.EXECUTABLE(inicia con begin y finaliza con end) esta sección necesariamente debe contener al menos una sentencia.
BEGIN(mandatorio)
- SQL y PL/SQL sentencias
EXCEPTION(opcional)
- Acciones a desarrollar cuando ocurren errores.
END;(mandatorio)

3.EXCEPTION HANDLE(Manejo de excepciones) esta sección se encuentra anidada dentro de la sección ejecutable e inicia con la palabra EXCEPTION


TIPOS DE BLOQUES
Existen 3 tipos de bloques que comprenden un Programa PL/SQL
1.Anónimos
No tienen nombre y son compilados cada vez que la aplicación es ejecutada ya que estos bloques nose almacenan en la bd.
2.Subprogramas(Procedimientos & Funciones)
Tienen un nombre especifico y son almacenados en la BD, por ello podemos invocarlos cuando lo necesitemos. Los tipos son : procedimientos y funciones, los primeros desarrollan una acción y las funciones calculan y DEBEN retornan un valor.

Ejemplos de un bloque anónimo



1. Habilitar la salida de mensajes en SQL* PLUS

set server output on

2. Utilizaremos el paquete de oracle para mostrar los mensajes:

DBMS_OUTPUT.PUT_LINE();
3. detallamos un bloque anónimo :

Finalizamos el bloque con el "/" para proceder a su ejecución.