Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

Primeros Pasos Con PL SQL

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 8

Programación de bases de datos

Hasta ahora hemos usado ampliamente SQL con la potencia que le caracteriza para
formular consultas y administrar la base de datos, pero hay algunos aspectos que SQL
no es capaz de cubrir. MySQL no usa PL/SQL, éste se usa en otro SGBD llamado Oracle.

Para solventar esto surge la figura de PL/SQL (Procedural Language/ Structured Query
Language) que es un lenguaje procedimental desarrollado por Oracle. Es un lenguaje de
programación incrustado en Oracle que es capaz de entender las consultas SQL, pero no
soporta las sentencias de definición de datos (DDL) o de control de datos (DCL).
PL/SQL incluye características propias de un lenguaje procedimental:

1. Uso de variables.
2. Estructuras de control de flujo y toma de decisiones.
3. Control de excepciones.
4. Reutilización del código a través de procedimientos y funciones.

PL/SQL amplia SQL con los elementos característicos de los lenguajes de programación,
variables, sentencias de control de flujo, bucles ...

Cuando se desea realizar una aplicación completa para el manejo de una base de datos
relacional, resulta necesario utilizar alguna herramienta que soporte la capacidad de
consulta del SQL y la versatilidad de los lenguajes de programación tradicionales. PL/SQL
es el lenguaje de programación que proporciona Oracle para extender el SQL estándar
con otro tipo de instrucciones.

Primeros pasos con PL/SQL

Para programar en PL/SQL es necesario conocer sus fundamentos.

Como introducción vamos a ver algunos elementos y conceptos básicos del lenguaje.

 PL/SQL no es CASE-SENSITIVE, es decir, no diferencia mayúsculas de minúsculas como


otros lenguajes de programación como C o Java. Sin embargo, debemos saber que
ORACLE sí es CASE-SENSITIVE en las búsquedas de texto.

 Una línea en PL/SQL contiene grupos de caracteres conocidos como UNIDADES


LÉXICAS, que pueden ser clasificadas como:
o DELIMITADORES
o IDENTIFICADORES
o LITERALES
o COMENTARIOS
o EXPRESIONES

 DELIMITADOR: Es un símbolo simple o compuesto que tiene una función especial en


PL/SQL. Estos pueden ser de varios tipos y figuran en la tabla que sigue:
o Operadores aritméticos
o Operadores lógicos
o Operadores relacionales

 IDENTIFICADOR: Son empleados para nombrar objetos de programas en PL/SQL as í


como a unidades dentro del mismo, estas unidades y objetos incluyen:
o Constantes
o Cursores
o Variables
o Subprogramas
o Excepciones
o Paquetes

 LITERAL: Es un valor de tipo numérico, carácter, cadena o lógico no representado por


un identificador (es un valor explícito).

 COMENTARIO: Es una aclaración que el programador incluye en el código. Son


soportados 2 estilos de comentarios, el de línea simple y de multilínea, para lo cual son
empleados ciertos caracteres especiales como son:

-- Linea simple

/*
Conjunto de Lineas
*/

Tipos de datos en PL/SQL

Cada constante y variable tien un tipo de dato en el cual se especifica el formato de


almacenamiento, restricciones y rango de valores validos.

PL/SQL proporciona una variedad predefinida de tipos de datos . Casi todos los tipos
de datos manejados por PL/SQL son similares a los soportados por SQL. A continuación
se muestran los TIPOS de DATOS más comunes:

NUMBER (Numérico): Almacena números enteros o de punto flotante, virtualmente de


cualquier longitud, aunque puede ser especificada la precisión (Número de digitos) y la
escala que es la que determina el número de decimales.

-- NUMBER [(precision, escala)]


saldo NUMBER(16,2);
/* Indica que puede almacenar un valor numérico de 16
posiciones, 2 de ellas decimales. Es decir, 14 enteros
y dos decimales */

 CHAR (Carácter): Almacena datos de tipo carácter con una longitud máxima de 32767
y cuyo valor de longitud por defecto es 1

-- CHAR [(longitud_maxima)]
nombre CHAR(20);
/* Indica que puede almacenar valores alfanuméricos de 20
posiciones */

 VARCHAR2 (carácter de longitud variable): Almacena datos de tipo carácter


empleando sólo la cantidad necesaria aun cuando la longitud máxima sea mayor.

-- VARCHAR2 (longitud_maxima)
nombre VARCHAR2(20);
/* Indica que puede almacenar valores alfanuméricos de hasta
20
posicones */
/* Cuando la longitud de los datos sea menor de 20 no se
rellena con blancos */

 BOOLEAN (lógico): Se emplea para almacenar valores TRUE o FALSE.

hay_error BOOLEAN;

 DATE (fecha): Almacena datos de tipo fecha. Las fechas se almacenan internamente
como datos numéricos, por lo que es posible realizar operaciones aritméticas con ellas.

 Atributos de tipo. Un atributo de tipo PL/SQL es un modificador que puede ser usado
para obtener información de un objeto de la base de datos. El atributo %TYPE permite
conocer el tipo de una variable, constante o campo de la base de datos. El
atributo %ROWTYPE permite obtener los tipos de todos los campos de una tabla de la
base de datos, de una vista o de un cursor. PL/SQL también permite la creación de
tipos personalizados (registros) y colecciones (tablas de PL/SQL), que veremos en sus
apartados correspondientes.

Existen, por supuesto, muchos más tipos de datos, de los que no es necesario
aprender todos, la siguiente tabla los muestra:

Tipo de dato
Oracle 8i Oracle 9i Descripción
/ Sintáxis

Donde p es la precisión y e la escala.

La precisión máxima es La precisión máxima es


dec(p, e) Por ejemplo: dec(3,1) es un
de 38 dígitos. de 38 dígitos.
número que tiene 2 dígitos antes
del decimal y un dígito después
del decimal.
La precisión máxima es La precisión máxima es
decimal(p, e) Donde p es la precisión y e la escala.
de 38 dígitos. de 38 dígitos.
Por ejemplo: decimal(3,1) es
un número que tiene 2 dígitos
antes del decimal y un dígito
después del decimal.
double
precision

float

int

integer

Donde p es la precisión y e la escala.

La precisión máxima es La precisión máxima es


numeric(p, e) Por ejemplo: numeric(7,2) es
de 38 dígitos. de 38 dígitos.
un número que tiene 5 dígitos
antes del decimal y 2 dígitos
después del decimal.
Donde p es la precisión y e la escala.

La precisión máxima es La precisión máxima es


number(p, e) Por ejemplo: number(7,2) es
de 38 dígitos. de 38 dígitos.
un número que tiene 5 dígitos
antes del decimal y 2 dígitos
después del decimal.
real

smallint

Hasta 32767 bytes en Hasta 32767 bytes en


PLSQL. PLSQL. Donde tamaño es el número de
char (tamaño) caracteres a almacenar. Son cadenas
de ancho fijo. Se rellena con espacios.
Hasta 2000 bytes en Hasta 2000 bytes en
Oracle 8i. Oracle 9i.
Hasta 32767 bytes en Hasta 32767 bytes en
PLSQL. PLSQL. Donde tamaño es el número de
varchar2
caracteres a almacenar. Son cadenas
(tamaño)
de ancho variable.
Hasta 4000 bytes en Hasta 4000 bytes en
Oracle 8i. Oracle 9i.
long Hasta 2 gigabytes. Hasta 2 gigabytes. Son cadenas de ancho variable.

Hasta 32767 bytes en Hasta 32767 bytes en


PLSQL. PLSQL.
Son cadenas binarias de ancho
raw
variable.
Hasta 2000 bytes en Hasta 2000 bytes en
Oracle 8i. Oracle 9i.
Son cadenas binarias de ancho
long raw Hasta 2 gigabytes. Hasta 2 gigabytes.
variable.

date Una fecha entre el 1 de Una fecha entre el 1 de


Enero de 4712 A.C. y el Enero de 4712 A.C. y el
31 de Diciembre de 9999 31 de Diciembre de 9999
D.C. D.C.

timestamp fractional seconds Incluye año, mes día, hora, minutos y


(fractional No soportado por Oracle precision debe ser un segundos.
seconds 8i. número entre 0 y 9. (El
precision) valor por defecto es 6)
Por ejemplo: timestamp(6)

timestamp Incluye año, mes día, hora, minutos y


(fractional fractional seconds segundos; con un valor de
seconds No soportado por Oracle precision debe ser un desplazamiento de zona horaria.
precision) 8i. número entre 0 y 9. (El
with time valor por defecto es 6)
Por ejemplo: timestamp(5) with
zone
time zone
timestamp Incluye año, mes día, hora, minutos y
(fractional fractional seconds segundos; con una zona horaria
seconds No soportado por Oracle precision debe ser un expresada como la zona horaria actual.
precision) 8i. número entre 0 y 9. (El
with local valor por defecto es 6)
Por ejemplo: timestamp(4) with
time zone
local time zone

interval year Período de tiempo almacenado en años


year precision debe ser y meses.
(year No soportado por Oracle
un número entre 0 y 9.
precision) to 8i.
(El valor por defecto es 2)
month Por ejemplo: interval year(4) to
month
day precision debe ser
interval day un número entre 0 y 9.
(day (El valor por defecto es 2) Incluye año, mes día, hora, minutos y
precision) to segundos.
No soportado por Oracle
second
8i. fractional seconds
(fractional
precision debe ser Por ejemplo: interval day(2) to
seconds
precision)
un número entre 0 y second(6)
9. (El valor por
defecto es 6)
El formato del campo El formato del campo
rowid es: rowid es:

BBBBBBB.RRRR.FFFFF BBBBBBB.RRRR.FFFFF
donde BBBBBBB es el donde BBBBBBB es el Datos binarios de ancho fijo. Cada
rowid registro de la base de datos tiene una
bloque en el fichero bloque en el fichero
dirección física o rowid.
de la base de datos; de la base de datos;
RRRR es la fila del RRRR es la fila del
bloque; FFFFF es el bloque; FFFFF es el
fichero de la base de fichero de la base de
datos. datos.
urowid Rowid universal. Donde tamaño es
Hasta 2000 bytes. Hasta 2000 bytes.
[tamaño] opcional.

Válido en PLSQL, este Válido en PLSQL, este


boolean tipo de datos no existe en tipo de datos no existe en
Oracle 8i. Oracle 9i.
Hasta 32767 bytes en Hasta 32767 bytes en Donde tamaño es el número de
nchar
PLSQL. Hasta 2000 bytes PLSQL. Hasta 2000 bytes caracteres a almacenar. Cadena NLS de
(tamaño)
en Oracle 8i. en Oracle 9i. ancho fijo.

Hasta 32767 bytes en Hasta 32767 bytes en Donde tamaño es el número de


nvarchar2
PLSQL. Hasta 4000 bytes PLSQL. Hasta 4000 bytes caracteres a almacenar. Cadena NLS de
(tamaño)
en Oracle 8i. en Oracle 9i. ancho variable.

Localizadores de archivo apuntan a un


bfile Hasta 4 gigabytes. Hasta 4 gigabytes. objeto binario de sólo lectura fuera de
la base de datos.

Localizadores LOB apuntan a un gran


blob Hasta 4 gigabytes. Hasta 4 gigabytes. objeto binario dentro de la base de
datos.

Localizadores LOB apuntan a un gran


clob Hasta 4 gigabytes. Hasta 4 gigabytes. objeto de caracteres dentro de la base
de datos.

Localizadores LOB apuntan a un gran


nclob Hasta 4 gigabytes. Hasta 4 gigabytes. objeto NLS de caracteres dentro de la
base de datos.

Operadores en PL/SQL

La siguiente tabla ilustra los operadores de PL/SQL y su orden de precedencia. Cuanto


más arriba en la tabla más precedencia tienen, es decir, en caso de que en una
expresión se mezclen operadores, se harán primero las operaciones cuyo operador
tenga mayor precedencia:

Operador Acción

:= Operador de asignación

** Exponenciación (potencia)

+ - (unarios) Signo positivo o negativo

* Multiplicación
/ División

+ Suma
- Resta
|| Concatenación. Útil para unir varias cadenas en una

Operadores relacionales o de comparación:


=, <>, !=, igual a, distinto de, distinto de,
<, >, >=, <=, menor que, mayor que, mayor o igual, menor o igual,
IS NULL, LIKE, es nulo, como,
BETWEEN, IN entre, en

Operadores lógicos:
NOT negación lógica de un tipo boolean
AND operador AND lógico entre dos tipos de dato boolean
OR operador OR lógico entre dos tipos de dato boolean

La precedencia de las operaciones siempre puede ser modificada a nuestra conveniencia


mediante el uso de los paréntesis como en matemáticas . Así estas dos operaciones
tienen resultados distintos:

a:=3+5**3 será interpretado como 3+53, con lo cual a valdría 128, sin embargo,

a:=(3+5)**3 será interpretado como 83 y el valor de a sería 512.

También podría gustarte