Está en la página 1de 40

16.

Declaración de variables

16
Declaración de variables

_________________________________________________________________________
ORACLE SQL y PL/SQL 1
16. Declaración de variables

Objetivos
Despué
Despu
Después és de
de completar
completar lala lecció
lección podrá
lección podrá:
podrá:
•• Reconocer
Reconocer el el bloque
bloque de
de PL/SQL
PL/SQL básico
básico
yy sus
sus secciones
secciones
•• Describir
Describir la
la importancia
importancia de de variables
variables
PL/SQL
PL/SQL
•• Distinguir
Distinguir entre
entre variables
variables de
de PL/SQL
PL/SQL yy
no
no de
de PL/SQL
PL/SQL

•• Declarar
Declarar variables
variables PL/SQL
PL/SQL

•• Ejecutar
Ejecutar un
un bloque
bloque de
de PL/SQL
PL/SQL
16-2

Esta lección presenta las reglas y la estructura básica para la escribir y ejecutar bloques
de código PL/SQL. También muestra cómo declarar variables y asignarles un tipo de dato.

_________________________________________________________________________
ORACLE SQL y PL/SQL 2
16. Declaración de variables

Estructura del bloque PL/SQL

Estructura de los bloques PL/SQL

•• DECLARE
DECLARE––Optional
Optional
––Variables,
Variables,cursors,
cursors,user-defined
user-defined
exceptions
exceptions
•• BEGIN
BEGIN––Mandatory
Mandatory
––SQL
SQLstatements
statements
––PL/SQL
PL/SQLstatements
statements
•• EXCEPTION
EXCEPTION––Optional
Optional DECLARE
––Actions
Actionsto
toperform
performwhen
when
errors
errorsoccur
occur BEGIN
•• END;
END;––Mandatory
Mandatory EXCEPTION

END;

16-3

PL/SQL es un lenguaje estructurado basado en bloques, queriendo decir con esto, que
los programas pueden ser divididos en bloques lógicos. Un bloque de PL/SQL comprende
tres secciones: declarativa (opcional), ejecutable (requerido), y de excepciones (opcional).
Sólo las llaves BEGIN y END son requeridas. Puede declarar y usar variables locales
dentro de los bloques. Las condiciones de error (conocidas como excepciones) pueden
ser manejadas específicamente dentro del bloque definido para ellas. Puede almacenar y
cambiar valores dentro de un bloque de PL/SQL; declarándose y refiriéndose a variables
y a otros identificadores.
La siguiente tabla describe las tres secciones del bloque.

Sección Descripción Inclusion


Declarativa Contiene todas las variables, constantes, Opcional
cursores, excepciones definidas por el usuario
que se referencian en las secciones ejecutables
y declarativas.
Executable Contiene las sentencias SQL para manipular Obligatoria
datos de la base de datos, así como sentencias
PL/SQL para manipular datos en el bloque
Manejo de Especifica las acciones a ejecutar cuando los Opcional
excepciones errores y las condiciones anormales se
presentan en la sección ejecutable

_________________________________________________________________________
ORACLE SQL y PL/SQL 3
16. Declaración de variables

Ejecutar sentencias y bloques PL/SQL desde SQL*Plus

Estructura de los bloques PL/SQL

DECLARE
DECLARE
v_variable
v_variable VARCHAR2(5);
VARCHAR2(5);
BEGIN
BEGIN
SELECT
SELECT column_name
column_name
INTO
INTO v_variable
v_variable
FROM
FROM table_name;
table_name;
EXCEPTION
EXCEPTION
WHEN
WHEN exception_name
exception_name THEN
THEN DECLARE
...
...
END; BEGIN
END;
EXCEPTION

END;

16-4

 Coloque un punto y coma (;) en el final de una declaración SQL O PL/SQL.


 Coloque una diagonal (/) para correr un bloque PL/SQL anónimo en el buffer SQL.
Cuando el bloque es ejecutado satisfactoriamente, sin errores manejados o
errores compilados, el mensaje de salida debería ser el siguiente:

PL/SQL procedure successfully completed

 Coloque un punto (.) para cerrar el buffer de SQL*Plus. Un bloque de PL/SQL es


tratado como una sóla sentencia en el buffer, y los símbolos ; no cierran el buffer.

Nota: en PL/SQL, un error es llamado excepción.


La palabras clave DECLARE, BEGIN, y EXCEPTION no son seguidas por un punto y
coma. Sin embargo, END y todas las otras sentencias PL/SQL requieren del punto y coma
para terminar la sentencia. Puede acomodar sentencias juntas sobre la misma línea. Sin
embargo, no se recomienda este método por motivos de claridad o corrección.

_________________________________________________________________________
ORACLE SQL y PL/SQL 4
16. Declaración de variables

Tipos de Bloques

Tipos de bloques
Anó
Anónimo Procedimiento Funció
Función
[DECLARE]
[DECLARE] PROCEDURE
PROCEDURE name
name FUNCTION
FUNCTION name
name
IS
IS RETURN
RETURN datatype
datatype
IS
IS
BEGIN
BEGIN BEGIN
BEGIN BEGIN
BEGIN
--statements
--statements
--statements --statements
--statements
--statements --statements
--statements
--statements
RETURN
RETURN value;
value
value;;
[EXCEPTION]
[EXCEPTION] [EXCEPTION]
[EXCEPTION] [EXCEPTION]
[EXCEPTION]

END;
END; END;
END; END;
END;

16-5

Cada unidad de PL/SQL se comprende de uno a más bloques. Estos bloques pueden
estar enteramente separados o anidados dentro de otros. Las unidades básicas
(procedimientos y funciones, tambien conocidos como subprogramas, y los bloques
anónimos) son bloques lógicos ó programas PL/SQL Estos que pueden contener
cualquier número de subbloques anidados. Por lo tanto un bloque puede representar una
pequeña parte de otro bloque, que a su vez puede ser la parte de la unidad entera de
código. De los dos tipos de construcciones PL/SQL disponibles, bloques anónimos y
subprogramas, sólo los bloques anónimos son cubiertos en este curso.
Bloques anónimos
Los bloques anónimos son bloques sin nombre. Son declarados en un punto de una
aplicación donde deben ser ejecutados y son pasados al motor de PL/SQL para la su
ejecución en tiempo real. Puede integrar un bloque anónimo dentro de un programa de
precompilador, dentro de SQL*Plus o del Server Manager. Los Triggers son componentes
de Oracle Developer y consisten en tales bloques.

_________________________________________________________________________
ORACLE SQL y PL/SQL 5
16. Declaración de variables

Tipos de Bloques (Continuación)

Tipos de bloques
Anó
Anónimo Procedimiento Funció
Función
[DECLARE]
[DECLARE] PROCEDURE
PROCEDURE name
name FUNCTION
FUNCTION name
name
IS
IS RETURN
RETURN datatype
datatype
IS
IS
BEGIN
BEGIN BEGIN
BEGIN BEGIN
BEGIN
--statements
--statements
--statements --statements
--statements
--statements --statements
--statements
--statements
RETURN
RETURN value;
value
value;;
[EXCEPTION]
[EXCEPTION] [EXCEPTION]
[EXCEPTION] [EXCEPTION]
[EXCEPTION]

END;
END; END;
END; END;
END;

16-5

Subprogramas
Los subprogramas son bloques de PL/SQL con nombres que pueden tomar parámetros y
pueden ser invocados. Puede declararlos como procedimientos o como funciones.
Generalmente se usa un procedimiento para realizar una acción y una función para
calcular un valor. Puede almacenar subprogramas en el servidor o a nivel de aplicación.
Usando componentes de Oracle Developer (Forms, Reports, y Graphics) puede declarar
procedimientos y funciones como parte de la aplicación (una forma o reporte), y llamar
otros procedimientos, funciones, y triggers (ver la nueva pagina) dentro de la misma
aplicación siempre que sea necesario.

Note: Una función es similar a un procedimiento, a excepción de que la función debe


regresar un valor.

_________________________________________________________________________
ORACLE SQL y PL/SQL 6
16. Declaración de variables

Constructores de Programa

Constructores de Programa
Función
Función //
Bloque
Bloque Procedimiento
Procedimiento
Anónimo
Anónimo
DECLARE Almacenado
Almacenado

Trigger BEGIN Función


Función //
Trigger de
de
Aplicación
Aplicación Procedimiento
Procedimiento
EXCEPTION de
de Aplicación
Aplicación

Trigger
END; Función
Función //
Trigger de
de Procedimiento
Base Procedimiento
Base de
de Datos
Datos Empaquetado
Empaquetado

16-6

La siguiente tabla muestra una variedad de diferentes construcciones de programa de


PL/SQL que se usan el un bloque de PL/SQL básico. Están disponibles dependiendo del
ambiente donde son ejecutados.

Constructor de
programa Descripción Disponible en
Bloque anónimo Bloque de PL/SQL sin nombre que es integrado dentro Todos los ambientes PL/SQL
de una aplicación o es utilizado interactivamente
Prodedimiento Bloque de PL/SQL nombrado, almacenado dentro del Servidor de Oracle
almacenado o Servidor de Oracle que puede aceptar parámetros y
funcion puede ser invocado repetidamente por su nombre
Procedimiento o Bloque de PL/SQL nombrado, almacenado dentro de una Componentes de Oracle Developer por
función de aplicación biblioteca de Oracle Developer dentro de una aplicación ejemplo, Forms
o estar compartida. Puede aceptar parámetros y puede
ser invocado repetidamente por su nombre
Paquete Módulo nombrado de PL/SQL que agrupa Servidor de Oracle y Oracle Developer
procedimientos, funciones e identificadores relacionados
entre sí.
Trigger de ta base de Bloque de PL/SQL que está asociado a una tabla de la Oracle Server
datos base de datos y es disparado automáticamente cuando
es ejecutada una sentencia DML
Trigger de una Bloque de PL/SQL que está asociado a un evento de la Oracle Developer/2000
Aplicación aplicación y es disparado automáticamente

_________________________________________________________________________
ORACLE SQL y PL/SQL 7
16. Declaración de variables

Uso de Variables

Uso de Variables

Usa
Usa variables
variables para:
para:
•• Almacenar
Almacenar temporalmente
temporalmente datos
datos
•• Manipular
Manipular datos
datos almacenados
almacenados
•• Reutilización
Reutilización
•• Facilitar
Facilitar el
el mantenimiento
mantenimiento

16-7

Con PL/SQL puedes declarar variables y usarlas con sentencias SQL o sentencias de
PL/SQL en cualquier lugar donde una expresión pueda ser usada.
Almacenamiento temporal de datos
Los datos pueden ser almacenados temporalmente en una o más variables para validar
las entradas de datos y continuar más adelante con el proceso de flujo de datos.
Manipulación de valores almacenados
Las variables pueden ser usadas para calcular y manipular otros datos sin accesar a la
base de datos.
Reutilizabilidad
Una vez declaradas, la variables pueden ser usadas repetidamente con una aplicación
simple para referenciarlas en otras sentencias, incluyendo otras sentencias declarativas.

_________________________________________________________________________
ORACLE SQL y PL/SQL 8
16. Declaración de variables

Uso de Variables (Continuación)

Uso de Variables

Usa
Usa variables
variables para:
para:
•• Almacenar
Almacenar temporalmente
temporalmente datos
datos
•• Manipular
Manipular datos
datos almacenados
almacenados
•• Reutilización
Reutilización
•• Facilitar
Facilitar el
el mantenimiento
mantenimiento

16-7

Facil de mantener
Se puede usar %TYPE y %ROWTYPE (más información sobre %ROWTYPE se cubre en
una lección posterior) para declarar variables, basando las declaraciones en las
definiciones de columnas de la base de datos. Las variables de PL/SQL o las variables de
cursor declaradas previamente dentro del alcance actual, pueden también utilizar los
atributos %TYPE y %ROWTYPE como especificaciones del tipo de datos. Si una
definición subyacente cambia, la declaración de la variable cambia por consiguiente en
tiempo ejecución. Esto proporciona independencia a los datos, reduce costos de
mantenimiento, y permite que los programas se adapten mientras la base de datos
cambia para resolver nuevas necesidades del negocio.

_________________________________________________________________________
ORACLE SQL y PL/SQL 9
16. Declaración de variables

Manejo de variables en PL/SQL

Manejo de Variables de PL/SQL

•• Declare
Declare ee inicialice
inicialice variables
variables dentro
dentro de
de
la sección de declaración.
la sección de declaración.
•• Asigne
Asigne nuevos
nuevos valores
valores aa la
la variable
variable
dentro
dentro de
de la
la sección
sección ejecutable.
ejecutable.
•• Pase
Pase valores
valores dentro
dentro de
de bloques
bloques PL/SQL
PL/SQL
por
por medio
medio dede parámetros.
parámetros.
•• Ver
Ver los
los resultados
resultados aa través
través dede variables
variables
de
de salida.
salida.

16-8

Declare e inicialice las variables dentro de la sección declarativa.


Puede declarar variables en la sección declarativa de cualquier bloque de PL/SQL,
subprograma, o paquete. Las declaraciones asignan un espacio de almacenamiento para
un valor, especifican el tipo de dato, y nombrar la posición de almacenamiento para que
se le pueda hacer referencia. Las declaraciones también pueden asignar un valor inicial e
imponer un constraint de tipo NOT NULL.
Asigne nuevos valores a la variable dentro de la sección ejecutable.
El valor existente de la variable se sustituye por el nuevo.
Debe declarar una variable antes del referirse ella en otras sentencias, inclusó de otras
sentencias declarativas.
Pase los valores del subprograma de PL/SQL con parámetros.

_________________________________________________________________________
ORACLE SQL y PL/SQL 10
16. Declaración de variables

Manejo de variables en PL/SQL (Continuación)

Manejo de Variables de PL/SQL

•• Declare
Declare ee inicialice
inicialice variables
variables dentro
dentro de
de
la sección de declaración.
la sección de declaración.
•• Asigne
Asigne nuevos
nuevos valores
valores aa la
la variable
variable
dentro
dentro de
de la
la sección
sección ejecutable.
ejecutable.
•• Pase
Pase valores
valores dentro
dentro de
de bloques
bloques PL/SQL
PL/SQL
por
por medio
medio dede parámetros.
parámetros.
•• Ver
Ver los
los resultados
resultados aa través
través dede variables
variables
de
de salida.
salida.

16-8

Hay tres tipos de parámetros, In (default), OUT, e IN OUT. Use el parámetro IN para
pasar valores al subprograma llamado. Use el parámetro OUT para devolver valores del
subprograma. Y use el parámetro IN OUT para pasar valores iniciales al subprograma
llamado y devolver los valores actualizados al que hace la petición. Los parámetros del
subprograma IN y OUT son cubiertos en el curso de Unidades de Programación de
PL/SQL.
Vea los resultados de un bloque PL/SQL a través de las variables de salida.
Puede usar variables de referencia para la entrada o salida de las sentencias de
manipulación de datos SQL.

_________________________________________________________________________
ORACLE SQL y PL/SQL 11
16. Declaración de variables

Tipos de Variables

Tipos de variables

•• Variables
Variables PL/SQL
PL/SQL
–– Scalares
Scalares
–– Compuestos
Compuestos
–– De
De Referencia
Referencia
–– LOB
LOB (objetos
(objetos grandes)
grandes)
•• Variables
Variables No-PL/SQL
No-PL/SQL
–– Variables
Variables bind
bind yy host
host

16-9

Todas las variables de PL/SQL un tipo de datos asociado, que especifican un formato de
almacenamiento, constraints, y rangos válidos de valores. PL/SQL suporta cuatro
categorías de tipos de datos —escalar, compuesto, de referencia, and LOB (objetos
grandes)— que puede usar para declarar variables, constantes, y apuntadores.

El tipo de dato escalar aloja un solo valor. Los principales tipos de datos corresponden a
los mismos tipos de columnas de las tablas del servidor de Oracle; PL/SQL también
permite variables Booleanas. Los tipos de datos compuestos como registros permiten los
definir un conjunto de datos para que puedan ser manipulados en bloques PL/SQL. Los
tipos de datos compuestos son brevemente mencionados en este curso.

_________________________________________________________________________
ORACLE SQL y PL/SQL 12
16. Declaración de variables

Tipos de Variables (Continuación)

Tipos de variables

•• Variables
Variables PL/SQL
PL/SQL
–– Scalares
Scalares
–– Compuestos
Compuestos
–– De
De Referencia
Referencia
–– LOB
LOB (objetos
(objetos grandes)
grandes)
•• Variables
Variables No-PL/SQL
No-PL/SQL
–– Variables
Variables bind
bind yy host
host

16-9

Los tipos de referencia almacenan valores llamados apuntadores, que apuntan a otros
elementos del programa. Los tipos de datos de referencia no son cubiertos en este curso.
Los tipos de datos LOB, almacenan valores llamados localizadores, que especifican la
localización de los objetos grandes (imágenes por ejemplo) y que son almacenados fuera
la base de datos. Los tipos de datos LOB sólo se mencionan brevemente en este curso
Las variables No-PL/SQL incluyen variables declaradas en programas del precompilador,
representan elementos en aplicaciones de Forms, y variables host de SQL*PLUS.

Las variables de sustitución en SQL*PLUS permiten almacenar y editar sintaxis de


porciones de comandos antes de correrlos. Estas son verdaderas variables de host, las
que usted puede usar para pasar valores en tiempo ejecución, en número o en carácter, a
un bloque de PL/SQL. Debe escribir el símbolo : antes del nombre de la variable, al
referirse a este tipo de identificadores,.

_________________________________________________________________________
ORACLE SQL y PL/SQL 13
16. Declaración de variables

Tipos de Variables

Tipos de Variables
25-OCT-99
TRUE “Four score and seven years ago
our fathers brought forth upon
this continent, a new nation,
conceived in LIBERTY, and dedicated

256120.08 to the proposition that all men


are created equal.”

Atlanta

16-10

Ejemplos de las diferentes tipos de datos de variables en la diapositiva:


TRUE representa un valor tipo Boolean.
25-OCT-99 representa un tipo DATE.
La fotografía represente un tipo BLOB.
El texto de un discurso representa un tipo LONG RAW.
256120.08 representa un tipo de dato NUMBER con precisión.
La película representa a tipo BFILE.
El nombre de la ciudad representa un tipo VARCHAR2.

_________________________________________________________________________
ORACLE SQL y PL/SQL 14
16. Declaración de variables

Declarando Variables PL/SQL

Declarando variables PL/SQL

Sintaxis
Sintaxis
identifier
identifier [CONSTANT]
[CONSTANT] datatype
datatype [NOT
[NOT NULL]
NULL]
[:=
[:= || DEFAULT
DEFAULT expr];
expr];

Ejemplos
Ejemplos
Declare
Declare
v_hiredate
v_hiredate DATE;
DATE;
v_deptno
v_deptno NUMBER(2)
NUMBER(2) NOT
NOT NULL
NULL :=
:= 10;
10;
v_location
v_location VARCHAR2(13)
VARCHAR2(13) :=
:= 'Atlanta';
'Atlanta';
c_
c_ comm
comm CONSTANT
CONSTANT NUMBER
NUMBER :=
:= 1400;
1400;

16-11

Tiene que declarar todos las variables PL/SQL dentro de la sección de declaración antes
de referirse a ellas dentro del bloque de PL/SQL. Tiene la opción para asignar un valor
inicial. No tiene que asignar un valor a una variable para declararla. Si se refiere a otras
variables en una declaración, debe estar seguro declararlos separadamente en una
declaración previa.
En la sintaxis,
identifier es el nombre de la variable.
CONSTANT Indica que no puede cambiar el valor de la variable; todos las
variables de tipo constant deben ser inicializadas.
datatype es un tipo de datos escalar, compuesto, de referencia, or LOB (en
este curso solo veremos escalar y compuesto).
NOT NULL Indica que la variable debe contener un valor; todas las variables
NOT NULL deben ser inicializada.
expr es cualquier expresión de PL/SQL que pueda ser un literal, otra
variable, o una expresión que involucre procedimientos o funciones.

_________________________________________________________________________
ORACLE SQL y PL/SQL 15
16. Declaración de variables

Reglas

Declarando Variables PL/SQL


Reglas:
Reglas:
•• Siga
Siga convenciones
convenciones de
de nombramiento.
nombramiento.
•• Inicialize
Inicialize variables
variables designadas
designadas como
como
NOT NULL.
NOT NULL.
•• Inicialice
Inicialice identificadores
identificadores usando
usando el el
operador
operador de de asignación
asignación (:=)
(:=) oo usando
usando la
la
palabra
palabra reservada
reservada DEFAULT.
DEFAULT.
•• Declare
Declare unun identificador
identificador por
por línea.
línea.

16-12

La expresión asignada puede ser un literal, otra variable, o una expresión que implica a
operadores y funciones.
Nombre al identificador según las mismas reglas usadas para objetos de SQL.
Puede usar convenciones de nombramiento —por ejemplo, v_name para representar una
variable y c_name para representar una constante.
Inicialice la variable con una expresión a través del operador de asignación (:=) o,
su equivalente, la palabra reservada DEFAULT. Si no asigna un valor inicial, la variable
nueva contiene el valor NULL.
Si usa el constraint NOT NULL, debe asignar un valor.
Declare sólo un identificador por línea de código ya que es más fácil de leer y mantener.
En declaraciones de constantes, la palabra clave CONSTANT debe preceder del tipo de
dato especificado.
La declaración siguiente nombra una constante de tipo REAL y le asigna el valor de
50000. Una constante debe ser inicializada en su declaración; si no lo hace, obtendrá un
error de compilación cuando la declaración es compilada.

v_sal CONSTANT REAL := 50000.00;

_________________________________________________________________________
ORACLE SQL y PL/SQL 16
16. Declaración de variables

Reglas de Nombramiento

Reglas de nombramiento
•• Dos
Dos variables
variables pueden
pueden tener
tener el el mismo
mismo
nombre,
nombre, a condición de que estén en
a condición de que estén en
bloques diferentes.
bloques diferentes.
•• El
El nombre
nombre de
de la
la variable
variable (el
(el identificador)
identificador) no
no
debería
debería ser
ser el
el mismo
mismo nombre
nombre que que las
las
columnas
columnas de
de las
las tablas
tablas usadas
usadas enen el
el bloque.
bloque.
DECLARE
DECLARE
empno
empno NUMBER(4);
NUMBER(4);
BEGIN
BEGIN
SELECT
SELECT empno
empno
INTO
INTO empno
empno
FROM
FROM emp
emp
WHERE
WHERE ename
ename == 'SMITH';
'SMITH';
END;
END;

16-13

Dos objetos pueden tener el mismo nombre, con tal de que sean definidos en bloques
diferentes. Donde los objetos coexistan, sólo el objeto declarado en el bloque actual
puede ser usado.
No debería escoger el mismo nombre para una variable, que el nombre de columnas de
la tabla usada en el bloque. Si existen variables PL/SQL en declaraciones SQL y tienen el
mismo nombre que una columna, el Servidor de Oracle asume que la columna es referida.
Aunque el ejemplo de código de la diapositiva corre sin ningún problema, el código se
escribe usando el mismo nombre para una tabla de base de datos y el nombre variable,
por tanto no es fácil de leer ni es fácil de mantener.
Considere adoptar una convención de nombramiento para varios objetos como el ejemplo
siguiente. Usando v_ como un prefijo que representa la variable, y g_ que representa la
variable global, esto evita tener conflictos con objetos de la base de datos.
DECLARE
v_hiredate date
g_deptno number(2) NOT NULL := 10;
BEGIN
...

Nota: los nombres de los identificadores no deben ser más de 30 caracteres. El primer
carácter debe ser una letra y los restantes pueden ser letras, números, ó símbolos especiales.

_________________________________________________________________________
ORACLE SQL y PL/SQL 17
16. Declaración de variables

Asignando valores a una variable

Asignando valores
valores a una variables
variables
Sintaxis
Sintaxis
identifier
identifier :=
:= expr;
expr;

Ejemplos
Ejemplos
Defina
Defina una
una fecha
fecha de
de contratación
contratación para
para los
los
nuevos
nuevos usuarios
usuarios
v_hiredate
v_hiredate :=
:= '31-DEC-98';
'31-DEC-98';

Defina
Defina el
el nombre
nombre del
del empleado
empleado “Agustín".
“Agustín".
v_ename
v_ename :=
:= 'Maduro';
'Maduro';

16-14

Para asignar o reasignar un valor a una variable, escribe una sentencia de asignación
PL/SQL. Explícitamente debes llamar la variable que va a recibir el nuevo valor a la
izquierda del operador de asignación (:=).
En la sisntaxis,
identifier es el nombre de la variable escalar.
expr puede ser una variable, literal, o una llamada a función, pero no una
columna de la base de datos.
Los ejemplos de asignación de variables son definidos como lo siguiente:
Establezca el salario máximo identificado en V_MAX_SAL, a la variable del salario actual
V_SAL.
Almacene el nombre "Matt" en el identificador v_ename

_________________________________________________________________________
ORACLE SQL y PL/SQL 18
16. Declaración de variables

Asignando valores a una variable (Continuación)

Asignando valores
valores a una variables
variables
Sintaxis
Sintaxis
identifier
identifier :=
:= expr;
expr;

Ejemplos
Ejemplos
Defina
Defina una
una fecha
fecha de
de contratación
contratación para
para los
los
nuevos
nuevos usuarios
usuarios
v_hiredate
v_hiredate :=
:= '31-DEC-98';
'31-DEC-98';

Defina
Defina el
el nombre
nombre del
del empleado
empleado “Agustín".
“Agustín".
v_ename
v_ename :=
:= 'Maduro';
'Maduro';

16-14

Otro modo de asignar valores a variables es seleccionar o traer valores de la base de


datos. En el ejemplo siguiente, el servidor de Oracle calcula un bono del 10 % cuando
seleccionas el sueldo de un empleado.

SQL> SELECT sal * 0.10


2 INTO bonus
3 FROM emp
4 WHERE empno = 7369;

Entonces puede usar la variable bonus en otro calculo o insertar su valor en una tabla de
la base de datos
Nota: Para asignar un valor de base de datos en una variable, use una sentencia
SELECT o FETCH.

_________________________________________________________________________
ORACLE SQL y PL/SQL 19
16. Declaración de variables

Inicialización de Variables

Inicialización de Variables y
Palabras Clave
Usando
•• :=
:= El
El operador
operador de
de Asignación
Asignación
•• DEFAULT
DEFAULT
•• NOT
NOT NULL
NULL

16-15

Las variables son inicializadas cada vez que un bloque o subprograma sea requerido. Por
default, las variables son inicializadas en NULL. A no ser que expresamente inicialice una
variable, su valor es indefinido.
Use el operador de asignación (: =) para las variables que tienen algún valor.
v_hiredate := to_date('15-SEP-99', 'DD-MON-YY');

Debido a que el formato de fecha default dentro del servidor de Oracle podría diferir entre
una base de datos y otra, puede querer asignar valores de fecha de una manera genérica,
como en el ejemplo anterior.
DEFAULT: Puede usar la palabra reservada DEFAULT en lugar de usar el operador de
asignación para inicializar variables. Use DEFAULT para las variables que tienen un valor
definido.

_________________________________________________________________________
ORACLE SQL y PL/SQL 20
16. Declaración de variables

Inicialización de Variables (Continuación)

Inicialización de Variables y
Palabras Clave
Usando
•• :=
:= El
El operador
operador de
de Asignación
Asignación
•• DEFAULT
DEFAULT
•• NOT
NOT NULL
NULL

16-15

g_mgr NUMBER(4) DEFAULT 7839;

NOT NULL: Imponga el constraint NOT NULL cuando la variable deba contener un valor.
No puede asignar el valor NULL a una variable definida como NOT NULL. El constraint
NOT NULL debe ser seguido por una cláusula de inicialización.

Nota: Las cadenas de caracteres deben estar encerradas en apóstrofes, tal como: ---
'Hello, world'. Si una cadena de caracteres contiene un apóstrofe, escriba dos veces el
símbolo de apóstrofe, — por ejemplo, 'Account wasn''t found'.

_________________________________________________________________________
ORACLE SQL y PL/SQL 21
16. Declaración de variables

Tipos de Datos Escalares

Tipos de Datos Escalares


•• Contienen
Contienen un
un solo
solo valor
valor
•• No
No tienen
tienen componentes
componentes internos
internos

25-OCT-99
“Four score and seven years
ago our fathers brought
TRUE
forth upon this continent, a
new nation, conceived in

256120.08 LIBERTY, and dedicated to


the proposition that all men
are created equal.”
Atlanta
16-16

Un tipo de dato escalar aloja un solo valor y no tiene componentes internos. El tipo
escalar puede ser clasificado en cuatro categorías: número, carácter, fecha, y Booleano.
Los tipos de dato de carácter y el número tienen subtipos que asocian un tipo junto con
un constraint
Por ejemplo, INTEGER y POSITIVE son subtipos del tipo base llamado NUMBER.

_________________________________________________________________________
ORACLE SQL y PL/SQL 22
16. Declaración de variables

Tipos de Datos Escalares

Base Scalar Datatypes


•• VARCHAR2
VARCHAR2 (longitud_máxima)
(longitud_máxima)
•• NUMBER
NUMBER [(precisión,
[(precisión, escala)]
escala)]
•• DATE
DATE
•• CHAR
CHAR [(longitud_máxima)]
[(longitud_máxima)]
•• LONG
LONG
•• LONG
LONG RAW
RAW
•• BOOLEAN
BOOLEAN
•• BINARY_INTEGER
BINARY_INTEGER
•• PLS_INTEGER
PLS_INTEGER
16-17

Tipo de Dato Descripción


VARCHAR2 Tipo base para datos de carácter de longitud variable de hasta 32767
(longitud máxima) bytes. No hay tamaño por default para las variables y constantes
VARCHAR2.
NUMBER Tipo base para números de puntos fijos y flotantes.
[(precisión, escala)]
DATE Tipo base para fecha y hora. Los valores de FECHA incluyen el
tiempo del día en segundos desde la medianoche. El rango válido
para fechas oscila entre 4712 AC y 9999 AD.
CHAR Tipo base para datos de carácter de longitud fija hasta 32767 bytes.
[(longitud_máxima)] Si no especifica longitud_máxima, la longitud es definida a 1.
LONG Tipo base para datos de carácter de longitud variable hasta 32760
bytes. La anchura máxima de una columna LONG de la base de
datos es 2147483647 bytes.
LONG RAW Tipo base para datos binarios strings de byes hasta de 32760 bytes.
Los Datos LONG RAW no son interpretados por PL/SQL.
BOOLEAN Tipo base que almacena uno de los tres valores posibles usados para
cálculos lógicos: TRUE, FALSE, o NULL.
BINARY_INTEGER Tipo base para números enteros entre -2147483647 y 2147483647.
PLS_INTEGER Tipo base para enteros con signo entre -2147483647 and
2147483647. Los valores PLS_INTEGER requieren menos espacio
de almacenamiento y se procesan mas rapido que los valores de tipo
NUMBER y BINARY_INTEGER.

_________________________________________________________________________
ORACLE SQL y PL/SQL 23
16. Declaración de variables

Tipos de Datos Escalares (Continuación)

Base Scalar Datatypes


•• VARCHAR2
VARCHAR2 (longitud_máxima)
(longitud_máxima)
•• NUMBER
NUMBER [(precisión,
[(precisión, escala)]
escala)]
•• DATE
DATE
•• CHAR
CHAR [(longitud_máxima)]
[(longitud_máxima)]
•• LONG
LONG
•• LONG
LONG RAW
RAW
•• BOOLEAN
BOOLEAN
•• BINARY_INTEGER
BINARY_INTEGER
•• PLS_INTEGER
PLS_INTEGER
16-17

Nota: El tipo de dato LONG es similar a VARCHAR2, pero la longitud máxima de un valor
LONG es de 32,760 bytes. Por lo tanto, los valores más largos que 32,760 bytes no
pueden ser seleccionados de una columna de base de datos LONG dentro de una
variable LONG de PL/SQL.

_________________________________________________________________________
ORACLE SQL y PL/SQL 24
16. Declaración de variables

Declaración de variables escalares

Declaración de
de Variables
Variables Escalares
Escalares

Ejemplo
Ejemplo
v_job
v_job VARCHAR2(9);
VARCHAR2(9);
v_count
v_count BINARY_INTEGER
BINARY_INTEGER :=
:= 0;
0;
v_total_sal
v_total_sal NUMBER(9,2)
NUMBER(9,2) :=
:= 0;
0;
v_orderdate
v_orderdate DATE
DATE :=
:= SYSDATE
SYSDATE ++ 7;
7;
c_tax_rate
c_tax_rate CONSTANT
CONSTANT NUMBER(3,2)
NUMBER(3,2) :=:= 8.25;
8.25;
v_valid
v_valid BOOLEAN
BOOLEAN NOT
NOT NULL
NULL :=
:= TRUE;
TRUE;

16-18

Los ejemplos de declaración variables mostrados en la diapositiva son definidos como lo


siguiente:
Declaración de una variable para almacenar el rol de trabajo del empleado.
Declaración de una variable para contar las iteraciones de un loop y se inicializa la
variable en 0.
Declaración de una variable para acumular el sueldo total para un departamento e
inicializar la variable en 0.
Declaración de una variable para almacenar la fecha de embarque de una orden e
inicializar la variable a una semana de hoy.
Declaración de una variable constante para la tarifa fiscal, que nunca debe ser
modificada dentro del bloque PL/SQL.
Declaración de la bandera que indica si un dato es válido o inválido e inicializar la variable
en TRUE.

_________________________________________________________________________
ORACLE SQL y PL/SQL 25
16. Declaración de variables

El atributo %TYPE

El atributo %TYPE

•• Declara
Declara una
una variable
variable según:
según:
–– Una
Una definición
definición de
de columna
columna de
de la
la base
base
de datos
de datos
–– Otra
Otra variable
variable antes
antes declarada
declarada
•• Prefijo
Prefijo %TYPE
%TYPE con:
con:
–– La
La tabla
tabla yy columna
columna dede la
la base
base de
de
datos
datos
–– El
El nombre
nombre de de la
la variable
variable antes
antes
declarada
declarada
16-19

Cuando declara variables PL/SQL que deben alojar valores de columna, debe asegurarse
de que la variable es del tipo de datos correcto, incluyendo su precisión. Si esto no es así,
un error PL/SQL ocurrirá durante la ejecución.

En lugar de escribir código inflexible para definir el tipo de datos y la precisión de una
variable, puedes utilizar el atributo %TYPE para declarar la variable a semejanza de una
columna de la base de datos o bien de una variable antes definida. El atributo %TYPE se
utiliza cuando una variable alojará un dato derivado de la columna de una tabla en la base
de datos o si la variable será destinada a ser de lectura y de escritura. Para usar el
atributo en ligar de definir el tipo de datos requerido en la sección de declaración,
anteponga el nombre de la tabla seguido del nombre de la columna. Si está referenciando
una variable previamente definida, anteponga al atributo, el nombre de la variable antes
declarada.

_________________________________________________________________________
ORACLE SQL y PL/SQL 26
16. Declaración de variables

El atributo %TYPE (Continuación)

El atributo %TYPE

•• Declara
Declara una
una variable
variable según:
según:
–– Una
Una definición
definición de
de columna
columna de
de la
la base
base
de datos
de datos
–– Otra
Otra variable
variable antes
antes declarada
declarada
•• Prefijo
Prefijo %TYPE
%TYPE con:
con:
–– La
La tabla
tabla yy columna
columna dede la
la base
base de
de
datos
datos
–– El
El nombre
nombre de de la
la variable
variable antes
antes
declarada
declarada
16-19

PL/SQL determina cuál es el tipo de datos y su presición cuando el bloque es compilado,


para definir a la variable, por lo tanto, siempre será compatible a la columna que le va a
proveer el dato. Esta es una ventaja significativa para escribir o mantener código, debido
a que no hay necesidad de estar preocupado, en caso de que el tipo de la columna sea
modificado a nivel de la base de datos.
Puedes declarar una variable de acuerdo con la declaración de otra variable,
anteponiendo el nombre de la variable anteriormente definida, al atributo.

_________________________________________________________________________
ORACLE SQL y PL/SQL 27
16. Declaración de variables

Declaración de Variables con el atributo %TYPE

Declarando Variables con el


atributo %TYPE

Ejemplos
Ejemplos
...
...
v_ename
v_ename emp.ename%TYPE;
emp.ename%TYPE;
v_balance
v_balance NUMBER(7,2);
NUMBER(7,2);
v_min_balance
v_min_balance v_balance%TYPE
v_balance%TYPE :=
:= 10;
10;
...
...

16-20

Declare variables que almacenen el nombre de un empleado.

...
v_ename emp.ename%TYPE;
...

Declare variables que almacenen el balance de una cuenta bancaria, así como el balance
mínimo, que se comienza con 10.

...
v_balance NUMBER(7,2);
v_min_balance v_balance%TYPE := 10;
...

El constraint NOT NULL de una columna no se aplica a la variable usando %TYPE. Sin
embargo, si declara una variable usando el atributo %TYPE que usa una columna de
base de datos definida como NOT NULL, puede asignar el valor NULL a la variable.

_________________________________________________________________________
ORACLE SQL y PL/SQL 28
16. Declaración de variables

Declaración de variables BOOLEAN

Declarando
Declarando variables BOOLEAN
•• Solo
Solo los
los valores
valores TRUE,
TRUE, FALSE,
FALSE, yy NULL
NULL
pueden
pueden ser asignados a una variable de
ser asignados a una variable de
tipo Boolean.
tipo Boolean.
•• Las
Las variables
variables son
son utilizadas
utilizadas por
por los
los
operadores
operadores lógicos
lógicos AND,
AND, OR,
OR, yy NOT.
NOT.
•• Las
Las variables
variables siempre
siempre alojan
alojan TRUE,
TRUE,
FALSE, o NULL.
FALSE, o NULL.
•• Las
Las operaciones
operaciones aritméticas,
aritméticas, de
de
carácter,
carácter, yy de
de fecha
fecha puede
puede ser
ser usados
usados
para
para devolver
devolver unun valor
valor Boolean.
Boolean.
16-21

Con PL/SQL puede comparar variables SQL y declaraciones procedurales. Estas


comparaciones, llamadas expresiones Booleanas, consisten en expresiones simples o
complejas separadas por operadores relacionales. En una declaración SQL, puede usar
expresiones Booleanas para especificar los registros en una tabla que son afectados por
las instrucciones de código. En un programa prodecural, las expresiones Booleanas son
la base para el control condicional.
NULL significa la falta de valor, un valor inaplicable, o desconocido.
Ejemplo
v_sal1 := 50000;
v_sal2 := 60000;

La siguiente expresión produce TRUE


v_sal1 < v_sal2
Declara e inicializa una variable Booleana
v_comm_sal BOOLEAN := (v_sal1 < v_sal2);

_________________________________________________________________________
ORACLE SQL y PL/SQL 29
16. Declaración de variables

Tipos de Datos Compuestos

Tipos de Datos Compuestos

Tipos
Tipos
•• Tablas
Tablas PL/SQL
PL/SQL
•• Registros
Registros PL/SQL
PL/SQL

16-22

Los tipos de datos compuestos (o colecciones) son tablas, registros, tablas anidadas y
VARRAY. Use el tipo RECORD para tratar datos relacionados pero distintos como una
unidad lógica. Use el tipo de dato TABLE para referir y manipular una colección de datos
como un solo objeto. Ambos tipos de datos RECORD Y TABLE son cubiertos
detalladamente en una lección posterior. Los tipos de datos Nested TABLE y VARRAY no
son cubiertos en este curso.

_________________________________________________________________________
ORACLE SQL y PL/SQL 30
16. Declaración de variables

Variables de Tipo LOB

Variables de Tipo LOB


Recipiente
(CLOB)

Foto
(BLOB)

Película
(BFILE)

NCLOB

16-23

Con el tipo de dato LOB (objeto grande) de Oracle8 puede almacenar los bloques de
datos no estructurados (como el texto, imágenes gráficas, vídeos, y sonidos) hasta de 4
gigabytes de tamaño. El tipo de dato LOB permite al acceso eficiente, aleatorio a los datos
y puede ser atributo de un tipo de objeto. LOBs también apoyan el acceso aleatorio de
los datos.
 El tipo de dato CLOB (objeto grande de caracteres) es usado para almacenar
bloques grandes de datos de carácter de bytes simples en la base de datos.
 El tipo BLOB (objeto grande binario) es usado para almancenar objetos grandes
binarios que se encuentra alojados en línea (en una columna de la base de datos)
o fuera de línea (fuera de la base de datos).
 El tipo BFILE (archivo binario) es utilizado para almacenar grandes objetos
binarios que se encuentran en un archivo, dentro el sistema de archivos del
sistema operativo, es decir, fuera de la base de datos.
 El tipo NCLOB (objeto grande de caracter de lenguaje nacional) es usado para
almacenar grandes bloques de bites simples, o de multibytes de longitud variable.
Los datos NCHAR, pueden estar en línea o fuera de línea.

_________________________________________________________________________
ORACLE SQL y PL/SQL 31
16. Declaración de variables

Variables Bind

Variables Bind

Bind Variable
o de Paso
Server

16-24

Una variable bind es aquella que se declara en el ambiente host, y se utilizan para pasar
valores en tiempo ejecución a rutinas de PL/SQL, ya sea en tipo NUMBER o de caracter,
dentro de un programa de PL/SQL o fuera de el, puedes utilizar este tipo de variables tal
como otras que ya hemos repasado anteriormente.
Puedes referenciar variables declaradas en un ambiente de trabajo PL/SQL. Estas
variables incluyen aquellas de tipo host, declaradas en los precompiladotes, elementos
de texto de las aplicaciones de Developer 2000 echas en forms, y las variables bind del
ambiente SQL*Plus.
Creando Variables Bind
En el ambiente de SQL*Plus, para declarar una variable bind, debes usar el comando
VARIABLE. Por ejemplo, declara una variable de tipo NUMBER con lo siguiente:

VARIABLE return_code NUMBER

Ambos lenguajes SQL y SQL*Plus, pueden hacer referencia a variables bind, y SQL*Plus
puede desplegar su valor.

_________________________________________________________________________
ORACLE SQL y PL/SQL 32
16. Declaración de variables

Variables Bind (Continuación)

Variables Bind

Bind Variable
o de Paso
Server

16-24

Desplegando Variables Bind


En el ambiente de SQL*Plus, para desplegar el valor actual de las variables bind, debes
usar el comando PRINT. El siguiente ejemplo ilustra el comando PRINT:

SQL> VARIABLE n NUMBER


...
SQL> PRINT n

_________________________________________________________________________
ORACLE SQL y PL/SQL 33
16. Declaración de variables

Asignando Valores a las Variables

Referenciando Variables
No-PL/SQL

Almacene
Almacene el
el sueldo
sueldo anual
anual en
en una
una variable
variable
host
host de
de SQL*Plus.
SQL*Plus..
SQL*Plus
:g_monthly_sal
:g_monthly_sal :=
:= v_sal
v_sal // 12;
12;

•• Referencíe
Referencíe variables
variables no-PL/SQL
no-PL/SQL como
como
variables
variables host.
host.
•• Prefije
Prefije las
las referencias
referencias con
con :: ..

16-25

Para referenciar variables tipo host, debes agregar el símbolo (:) antes del nombre de la
variable, para distinguirlas de aquellas de tipo PL/SQL.
Ejemplos:

:host_var1 := v_sal;
:global_var1 := 'YES';

_________________________________________________________________________
ORACLE SQL y PL/SQL 34
16. Declaración de variables

Resumen

•• Los
Los bloques
bloques PL/SQL
PL/SQL son
son
compuestos de las secciones
compuestos de las secciones
DECLARE
siguientes:
siguientes:
BEGIN
–– Declarative
Declarative (optional)
(optional)
EXCEPTION
–– Executable
Executable (required)
(required) END;
–– Exception
Exception handling
handling (optional)
(optional)
•• Un
Un bloque
bloque PL/SQL
PL/SQL puede
puede ser
ser un
un
bloque
bloque anónimo,
anónimo, procedimiento,
procedimiento,
oo función.
función.
16-26

_________________________________________________________________________
ORACLE SQL y PL/SQL 35
16. Declaración de variables

Resumen

•• Variables
Variables o
o Identificadores
Identificadores PL/SQL:
PL/SQL:
–– Son
Son Definidos
Definidos en
en la
la sección
sección declarativa
declarativa
–– Pueden
Pueden ser
ser tipo
tipo escalar,
escalar, compuesto,
compuesto, de
de
referencia
referencia oo LOB
LOB
–– Pueden
Pueden basarse
basarse enen la
la definición
definición de
de otra
otra
variable
variable oo de
de un
un objeto
objeto de
de base
base de
de
datos
datos
–– Pueden
Pueden ser
ser Inicializados
Inicializados

16-27

_________________________________________________________________________
ORACLE SQL y PL/SQL 36
16. Declaración de variables

Practica

•• Determinar
Determinar la
la validez
validez de
de las
las declaraciones
declaraciones
•• Desarrollar
Desarrollar un
un bloque
bloque de
de PL/SQL
PL/SQL simple
simple

16-28

_________________________________________________________________________
ORACLE SQL y PL/SQL 37
16. Declaración de variables

Practice 16
Declaración de variables.
1. Evalua cada una de las siguientes declaraciones. Determina cual de ellas no es
legal y explica por qué.

a. DECLARE
v_id NUMBER(4);

b. DECLARE
v_x, v_y, v_z VARCHAR2(10);

c. DECLARE
v_birthdate DATE NOT NULL;

d. DECLARE
v_in_stock BOOLEAN := 1;

e. DECLARE
TYPE name_table_type IS TABLE OF VARCHAR2(20)
INDEX BY BINARY_INTEGER;
dept_name_table name_table_type;

_________________________________________________________________________
ORACLE SQL y PL/SQL 38
16. Declaración de variables

2. En cada uno de las siguientes instrucciones, determina el tipo de dato de la


expresión resultante.

a. v_days_to_go := v_due_date - SYSDATE;

b. v_sender := USER || ': ' || TO_CHAR(v_dept_no);

c. v_sum := $100,000 + $250,000;

d. v_flag := TRUE;

e. v_n1 := v_n2 > (2 * v_n3);

f. v_value := NULL;

3. Crea un bloque anónimo que imprima la siguiente frase en pantalla : “Mi bloque de
código PL/SQL si trabaja”. Utiliza una variable bind.

G_MESSAGE
-----------------------
My PL/SQL Block Works

_________________________________________________________________________
ORACLE SQL y PL/SQL 39
16. Declaración de variables

Si tienes tiempo completa el siguiente ejercicio:


4. Crea un bloque que declare dos variables, asignael valor de estas variables, a
variables host de SQL*Plus e imprime el resultado de las variables anteriores en
pantalla. Ejecuta tu bloque de código PL/SQL. Guarda el código que has escrito en un
archivo llamado p16q4.sql.

V_CHAR Caracter (de longitud variable)


V_NUM Number

Asigna los siguientes valores a las variables:

Variable Value
-------- -------------------------------------
V_CHAR La cadena '42 es la respuesta'
V_NUM Los primeros dos caracteres de la variable V_CHAR

G_CHAR
---------------------
42 is the answer

G_NUM
---------
42

_________________________________________________________________________
ORACLE SQL y PL/SQL 40

También podría gustarte