Está en la página 1de 211

11/3/2021 PL / SQL - Guía rápida

Sitio Web Wordpress SEO Nuestros servicios


Tutoriales

800 000 artículos a su disposición ...

PL / SQL - Guía rápida Tutorial de pl / sql

2020-11-19 22:01:05

PL / SQL - Guia rapida

PL / SQL - Presentacion

El lenguaje de programacion PL / SQL fue desarrolla


do por Oracle Corporation a nes de la decada de 19
80 como un lenguaje de extension de procedimient
o para SQL y la base de data relacional de Oracle. A
qui hay algunos data notables sobre PL / SQL:

https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 1/211
11/3/2021 PL / SQL - Guía rápida

PL / SQL es un lenguaje de procesamiento de transa


cciones de alto rendimiento y totalmente portatil.

PL / SQL proporciona un entorno de programacion i


ntegrado, interpretado e independiente del sistema
operativo.

PL / SQL tambien se puede llamar directamente des


de la interfaz de linea de comandos SQL * Plus .

Tambien se puede realizar una llamada directa desd


e llamadas de lenguaje de programacion externo a l
a base de data.

La sintaxis general de PL / SQL se basa en la del len


guaje de programacion ADA y Pascal.

https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 2/211
11/3/2021 PL / SQL - Guía rápida

Fuera de Oracle, PL / SQL esta disponible en TimesT


en In-Memory Database e IBM DB2 .

Caracteristicas de PL / SQL
PL / SQL tiene las siguientes caracteristicas:

1 PL / SQL esta estrechamente int


egrado con SQL.

2 Ofrece una amplia comprobacio


n de errores.

3 Ofrece muchos tipos de data.

4 Ofrece una variedad de estructur


as de programacion.

5 Soporta programacion estructur


ada a traves de funciones y procedimi
entos.
https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 3/211
11/3/2021 PL / SQL - Guía rápida

6 Es compatible con la programaci


on orientada a objetos.

7 Es compatible con el desarrollo d


e aplicaciones web y paginas de servi
dor.

Ventajas de PL / SQL
PL / SQL tiene las siguientes ventajas:

SQL es el lenguaje de base de data estandar y PL /


SQL esta fuertemente integrado con SQL. PL / SQL a
dmite SQL estatico y dinamico. SQL estatico admite
operacionesDML y control de transacciones desde e
l bloque PL / SQL. En SQL dinamico, SQL le permite i
ncrustar declaraciones DDL en bloques PL / SQL.

PL / SQL le permite enviar un bloque completo de in


strucciones a la base de data a la vez. Esto reduce el
https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 4/211
11/3/2021 PL / SQL - Guía rápida

tra co de la red y proporciona un alto rendimiento p


ara las aplicaciones.

PL / SQL brinda productividad a los programadores


porque puede consultar, transformar y actualizar da
ta en una base de data.

PL / SQL ahorra tiempo en el diseno y la depuracion


con funciones poderosas, como manejo de excepcio
nes, encapsulacion, enmascaramiento de data y tipo
s de data orientados a objetos.

Las aplicaciones escritas en PL / SQL son completa


mente portatiles.

PL / SQL proporciona un alto nivel de seguridad.

https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 5/211
11/3/2021 PL / SQL - Guía rápida

PL / SQL permite el acceso a paquetes SQL prede ni


dos.

PL / SQL proporciona soporte para programacion ori


entada a objetos.

PL / SQL admite el desarrollo de aplicaciones web y


paginas de servidor.

PL / SQL - Con guracion del ent


orno

En este capitulo, tenemos la con guracion del entor


no PL / SQL. PL / SQL no es un lenguaje de program
acion independiente; es una herramienta dentro del
entorno de programacion de Oracle. SQL * Plus es u
na herramienta interactiva que le permite ingresar s
entencias SQL y PL / SQL en el simbolo del sistema.
Estos comandos luego se envian a la base de data p
https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 6/211
11/3/2021 PL / SQL - Guía rápida

ara su procesamiento. Una vez procesadas las instr


ucciones, los resultados se devuelven y se muestran
en la pantalla.

Para ejecutar programas PL / SQL, debe tener el ser


vidor Oracle RDBMS instalado en su maquina. Esto
se encargara de la ejecucion de los comandos SQL. L
a version mas reciente de Oracle RDBMS es 11g. Pue
de descargar una version de essai de Oracle 11g des
de el siguiente enlace -

Descargar " Oracle 11g Express Edition

Debera descargar la version de 32 bits o 64 bits de l


a instalacion segun su sistema operativo. Generalm
ente hay dos archivos. Descargamos la version de 6
4 bits. Tambien utilizara pasos similares en su siste
ma operativo, sin importar si es Linux o Solaris.

win64_11gR2_database_1of2.zip

win64_11gR2_database_2of2 .zip

https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 7/211
11/3/2021 PL / SQL - Guía rápida

Despues de descargar los dos archivos anteriores, d


ebera descomprimirlos en un unico directorio de bas
e de data y bajo el cual encontrara los siguientes su
bdirectorios:

Paso 1

Ahora iniciemos Oracle Database Installer usando el


archivo del instalador. Aqui esta la primera pantalla.
Puede proporcionarr su ID de correo electronico y m
arque la casilla como se muestra en la siguiente cap
tura de pantalla. Haga clic en el boton Siguiente .

https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 8/211
11/3/2021 PL / SQL - Guía rápida

Paso 2

Seras dirigido a la siguiente pantalla; desmarque la


casilla y haga clic en el boton Continuar para contin
uar.

https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 9/211
11/3/2021 PL / SQL - Guía rápida

Paso 3

Simplemente seleccione la primera opcion Crear y c


on gurar la base de data usando el boton de opcio
n y haga clic en el boton Siguiente para continuar.

https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 10/211
11/3/2021 PL / SQL - Guía rápida

Paso 4

Suponemos que esta instalando Oracle con el propo


sito basico de aprendizaje y que lo instala en su PC
o computadora portatil, asi que seleccione la opcion
Clase de escritorio y haga clic en el boton Siguiente
para continuar.

https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 11/211
11/3/2021 PL / SQL - Guía rápida

Paso 5

Indique una ubicacion donde instalara Oracle Serve


r. Simplemente modi que Oracle Base y las otras ub
icaciones se estableceran automaticamente. Tambie
n debera proporcionar una contrasena pass; sera uti
lizado por el DBA del sistema. Una vez que haya pro
porcionado la informacion requerida, haga clic en el
boton Siguiente para continuar.

https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 12/211
11/3/2021 PL / SQL - Guía rápida

Paso 6

Nuevamente, haga clic en el boton Siguiente para c


ontinuarnube.

https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 13/211
11/3/2021 PL / SQL - Guía rápida

Paso 7

Haga clic en la bBoton Finalizar para continuar; esto


iniciara la instalacion real del servidor.

https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 14/211
11/3/2021 PL / SQL - Guía rápida

Paso 8

Tomara unos minutos, hasta que Oracle comience a


realizar la con guracion requerida.

https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 15/211
11/3/2021 PL / SQL - Guía rápida

Paso 9

Aqui la instalacion de Oracle copiara los archivos de


con guracion requeridos. Deberia llevar un tiempo -

https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 16/211
11/3/2021 PL / SQL - Guía rápida

Paso 10

Una vez que los archivos esten en la base de data co


piado, obtendra el siguiente cuadro de dialogo. Sim
plemente haga clic en el boton Aceptar y salga.

https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 17/211
11/3/2021 PL / SQL - Guía rápida

Paso 11

Durante la instalacion, tendra la ultima ventana sigu


iente.

https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 18/211
11/3/2021 PL / SQL - Guía rápida

Último paso

Ahora es el momento para veri car su instalacion. E


n el simbolo del sistema, use el siguiente comando s
i esta usando Windows -

sqlplus "/ as sysdba

Deberia tener el SQL le indica donde va a escribir su


s comandos ys PL / SQL -

https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 19/211
11/3/2021 PL / SQL - Guía rápida

Editor de texto
En ejecucion Los programas grandes desde el simbo
lo del sistema pueden perder inadvertidamente part
e de su trabajo. Siempre se recomienda usar archivo
s por lotes. Para usar los archivos por lotes:

Escriba su codigo en un editer de texto, como Bloc d


e notas, Bloc de notas +, o EditPlus , etc.

https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 20/211
11/3/2021 PL / SQL - Guía rápida

Guarde el archivo con la extension .sql en el director


io de inicio.

Ejecute el simbolo del sistema SQL * Plus desde el d


irectorio donde creo su archivo PL / SQL.

Escriba @ le_name en la linea de comandos de SQL


* Plus para ejecutar su programa.

Si no usa un archivo para ejecutar los PL / SQL, simp


lemente copie su codigo PL / SQL y haga clic derech
o en la ventana negra que muestra el 'Indicador SQ
L; utilice la opcion pegar para pegar el codigo compl
eto en el simbolo del sistema. Finalmente, simpleme
nte presione Enter para ejecutar el codigo, si aun no
se ha ejecutado.

PL / SQL - Sintaxis basica

En este capitulo, discutiremos la sintaxis basica de P


L / SQL, que es un lenguaje estructurado en bloques
>; esto signi ca que los programass PL / SQL se
https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 21/211
11/3/2021 PL / SQL - Guía rápida

S.

N Sections et deion

Declaraciones

Esta seccion comienza con la palabra clave DECLA


1 RE . Esta es una seccion opcional y de ne todas l

as variables, cursores, subrutinas y otros element


os que se utilizaran en el programa.

Comandos ejecutables

Esta seccion esta entre las palabras clave BEGIN


y END y es una seccion obligatoria. Consiste en la
2 s sentencias PL / SQL ejecutables del programa. D

ebe tener al menos una linea de codigo ejecutabl


e, que puede ser solo un comando NULL para indi
car que no se debe ejecutar nada..

Gestion excepciones

3 Esta seccion comienza con la palabra clave EXCE


PCIÓN . Esta seccion opcional contiene excepcion
es que manejan errores en el programa.

https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 22/211
11/3/2021 PL / SQL - Guía rápida

Cada instruccion PL / SQL termina con un punto y co


ma (;). Los bloques PL / SQL se pueden anidar dentr
o de otros bloques PL / SQL usando BEGIN y END . A
qui esta la estructura basica de un bloque PL / SQL -

DECLARE BEGIN EXCEPCIÓN END;

El 'Hello World '


ejemplo

DECLARE message varchar2 (20): = 'Hello, World! ';


BEGIN dbms_output.put_line (mensaje); FIN; /

La linea end; senala el nal del bloque PL / SQL. Par


a ejecutar el codigo desde la linea de comando SQL,
necesitaEs posible que deba escribir / al principio de
la primera linea vacia despues de la ultima linea del
codigo. Cuando el codigo anterior se ejecuta en el in
dicador SQL, produce el siguiente resultado:

Procedimiento de Hello World PL / SQL completado


con exito .

Identi cadores PL / SQL


Los identi cadores PL / SQL son constantes, variabl
es, excepciones, procedimientos, cursores y palabra

https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 23/211
11/3/2021 PL / SQL - Guía rápida

s reservadas. Los identi cadores consisten en una l


etra posiblemente seguida de varias letras, numero
s, signos de dolar, guiones bajos y signos de almoha
dilla y no deben exceder los 30 caracteres.

De forma predeterminada, los identi cadores no so


n sensibles a mayusculas . Por lo tanto, puede utiliz
ar entero o INTEGER para representar un valor num
erico. No puede utilizar una palabra clave reservada
como identi cador.

Delimitadores PL / SQL
Un delimitador es un simbolo con un signi cadoesp
ecial. Aqui esta la lista de delimitadores en PL / SQL
-

Delimita
Deion
dor

+, -, *, / Suma, resta / negacion, multiplicacion,

% Bandera de atributo

' Delimitador de cadena

. Selector de componentes

(,) Expresion de lista o delimitador

: Indicador de variable del host


https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 24/211
11/3/2021 PL / SQL - Guía rápida

, Separador de elementos

Delimitador de identi cador entre comilla


"
s

= Operador relacional

@ Indicador de acceso remoto

; Terminador de declaracion

:= Operador de asignacion

=> Operador de asociacion

|| Operador de concatenacion

** Operador de exponenciacion

<<, >> Delimitador de etiquetas (inicio y nal)

Delimitador de comentarios de varias line


/ *, * /
as (inicio y nal)

- Indicador de comentario de una sola linea

.. Operador de rango

<,> , <=,
Operadores relacionales
>=

, '=, ~ =,
Diferentes versiones de NOT EQUAL
^=

https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 25/211
11/3/2021 PL / SQL - Guía rápida

Los comentarios PL / SQL


Los comentarios del programa son declaraciones ex
plicativas que pueden incluirse en el codigo PL / SQL
que escribe y ayudan a cualquiera a leer su codigo s
ource. Todos los lenguajes de programacion permite
n algun tipo de comentario.

PL / SQL admite comentarios de una sola linea y de


varias lineas. Todos los caracteres disponibles en un
comentario son ignorados por el compilador PL / SQ
L. Los comentarios PL / SQL de una linea comienzan
con el delimitador - (guion doble) y los comentarios
de varias lineas estan rodeados por / * y * /.

DECLARE - mensaje de declaracion de voluntadriabl


e varchar2 (20): = '¡Hola, mundo! '; BEGIN / * * Sente
ncia (s) ejecutable PL / SQL * / dbms_output.put_line
(mensaje); FIN; /

Cuando el codigo anterior se ejecuta en el indicador


de SQL, produce la siguiente salida:

El procedimiento de PL / SQL Hello El mundo ha ter


minado con exito.

Unidades de programa PL / SQL

https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 26/211
11/3/2021 PL / SQL - Guía rápida

Una unidad PL / SQL es una de las siguientes:

1 Bloque PL / SQL

2 Funcion

3 Paquete

4 Cuerpo del paquete

5 Procedimiento

6 Activador

7 Escriba

8 Escriba cuerpo

Cada una de estas unidades se discutira en los sigui


entes capitulos.

PL / SQL - Tipos de data

https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 27/211
11/3/2021 PL / SQL - Guía rápida

En este capitulo tenemos los tipos de data en PL / S


QL. Las variables, constantes y parametros de PL / S
QL deben tener un tipo de data valido, que especi q
ue un formato de almacenamiento, restricciones y u
n rango valido de valores. Nos enfocamosDiscutirem
os los tipos de data ESCALAR y LOB en este capitul
o. Los otros dos tipos de data se trataran en otros ca
pitulos.

S.

N Categoria y Deion

Escalar

1 Valores unicos sin componentes internos, como N

UMBER, DATE, o BOOLEAN .

Objeto grande (LOB)

Punteros a objetos grandes almacenados por sep


2 arado de otros elementos de data, como texto, im

agenes gra cas, videoclips y formas de onda soni


do.

3
Compuesto

https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 28/211
11/3/2021 PL / SQL - Guía rápida

Elementos de data cuyos componentes internos s


on accesibles individualmente.Por ejemplo, colecc
iones y registros.

Referencia
4
Punteros a otros elementos de data.

Tipos y subtipos de data escalar


es PL / SQL
Los tipos y subtipos de data escalares PL / SQL pert
enecen a a las siguientes categorias -

S.
Tipo de fecha & Deion
No

Numerico

1 Valores numericos sobre los que se realizan ope


raciones aritmeticas.

Caracter

2 Valores alfanumericos que representan cadena

s o caracteres individuales.

https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 29/211
11/3/2021 PL / SQL - Guía rápida

3 Booleano

Valores logicos sobre los que se realizan operaci


ones logicas.

Fecha y hora
4
Fechas y horarios.

PL / SQL proporciona subtipos de tipos de data. Por


ejemplo, el tipo de data NUMBER tiene un subtipo ll
amado INTEGER. Puede usar los subtipos de su pro
grama PL / SQL para hacer que los tipos de data sea
n compatibles con los tipos de data en otros progra
mas mientras incrusta el codigo PL / SQL en otro pro
grama, como un programa. Java.

Tipos y subtipos de data numeri


cos PL / SQL
La siguiente tabla enumera los tipos de data numeri
cos PL / SQL prede nidos y sus subtipos -

S.No Tipo de data y deion 1

PLS_INTEGER

https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 30/211
11/3/2021 PL / SQL - Guía rápida

Entero con signo en el rango -2 147 483, 648 a 2147


483 647, representado en 32 bits

BINARY_INTEGER

Entero con signo entre -2 147 483 648 y 21 147 483


647, representado en 32 bits

BINARY_FLOAT

IEEE 754 numero de coma otante de formato de pr


ecision simple

BINARY_DOUBLE

Numero de punto otante de doble precision en for


mato IEEE 754

NUMBER (prec, scale)

Numero de coma ja o coma otante con un valor a


bsoluto entre 1E-130 y (pero no incluido) 1.0E126 Un

https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 31/211
11/3/2021 PL / SQL - Guía rápida

a variable NUMBER tambien puede representaringr


ese 0

DEC (prec, escala)

Tipo de punto jo especi co de ANSI con una precisi


on maxima de 38 digitos decimales

DECIMAL (prec, scale)

Escriba para Punto jo especi co de IBM con una pr


ecision maxima de 38 digitos decimales

NUMERIC (pre, secale)

Tipo otante con precision maxima de 38 digitos de


cimales

DOBLE PRECISIÓN

Tipo de punto otante especi co de ANSI con una p


recision maxima de 126 digitos binarios (aproximad

https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 32/211
11/3/2021 PL / SQL - Guía rápida

amente 38 digitos decimales)

10

FLOAT

Escriba virgulFlotador especi co de ANSI e IBM con


una precision maxima de 126 digitos binarios (aprox
imadamente 38 digitos decimales)

11

INT

Tipo entero especi co de ANSI con precision maxim


a de 38 digitos decimales

12

INTEGER

Tipo de entero especi co para ANSI e IBM con una p


recision maxima de 38 digitos decimales

13

SMALLINT

Tipo entero especi co de ANSI e IBM con una precisi


on maxima de 38 digitos decimales

https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 33/211
11/3/2021 PL / SQL - Guía rápida

14

REAL

Tipo de coma otante con una precision maxima de


63 digitos binarios (aproximadamente 18 digitos de
cimales)

Aqui hay un declaracion valida -

DECLARE num1 INTEGER; num2 REAL; num3 DOUB


LE PRECISION; BEGIN null; END; /

Cuando el codigo anterior se compila y ejecuta, prod


uce el siguiente resultado:

Procedimiento PL / SQL completado con exito

Tipos y subtipos de data de car


acteres PL / SQL
Aqui esta el detalle de los tipos de Datos de caracter
es prede nidos de PL / SQL y sus subtipos -

< td style = "text-align :; vertical-align: middle; "> 9

S.No Tipo de data y deion

1
CHAR

https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 34/211
11/3/2021 PL / SQL - Guía rápida

Cadena de caracteres de longit


ud ja con un tamano maximo
de 32,767 bytes

VARCHAR2

2 Cadena de caracteres de longit


ud variable con un tamano max
imo de 32,767 bytes

RAW

Cadena binaria o bytes de longi


3 tud variable de un tamano maxi
mo de 32,767 bytes, no interpr
etado por PL / SQL

NCHAR

4 Cadena de caracteres nacionale


s de longitud ja con un taman
o maximo de 32 767 bytes

5
NVARCHAR2

Cadena de caracteres nacional


de longitud variable con un tam
https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 35/211
11/3/2021 PL / SQL - Guía rápida

ano maximo de 32,767 bytes

LARGO

6 Cadena de caracteres de longit


ud variable con un tamano max
imo de 32,760 bytes

LONG RAW

Cadena binaria o de bytes de lo


7 ngitud variable con un tamano
maximo de 32,760 bytes, no int
erpretadose por PL / SQL

ROWID

8 Identi cador de la sico, la dir


eccion de una la en una matriz
ordinaria

UROWID

Identi cador de la
universal ( identi c
ador de la sico, l
ogico o externo)
https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 36/211
11/3/2021 PL / SQL - Guía rápida

Tipos de data booleanos PL / S


QL
El BOOLEAN el tipo de data almacena valores logico
s y se utilizan en operaciones logicas. Los valores lo
gicos son los valores booleanos TRUE y FALSE y el v
alor NULL .

Sin embargo, SQL no tiene ningun tipo de data equi


valente a BOOLEAN. Por lo tanto, los valores boolea
nos no se pueden usar en -

1 declaraciones SQL

2 funciones SQL integradas (como


TO_CHAR )

3 Funciones PL / SQL llamadas de


sderd 'sentencias SQL

Datetime PL / SQL y tipos de int


ervalo

https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 37/211
11/3/2021 PL / SQL - Guía rápida

El tipo de data DATE se usa para almacenar horas d


e data de longitud ja, que incluyen la hora del dia e
n segundos desde la medianoche. Las fechas valida
s son del 1 de enero de 4712 a. C. al 31 de diciembre
de 9999 d. C.

El formato de fecha predeterminado esta de nido p


or el parametro de inicializacion de Oracle NLS_DAT
E_FORMAT. Por ejemplo, el valor predeterminado po
dria ser 'DD-MON-YY ', que incluye un numero de do
s digitos para el dia del mes, una abreviatura para el
nombre del mes y los dos ultimos digitos del ano. Po
r ejemplo, 01-OCT-12.

Cada FECHA incluye el siglo, ano, mes, dia, hora, min


uto y segundo. La siguiente tabla muestra los valore
s validos para cada campo -

No

mbr
Valores de fecha y hora va Valores de rango
e de
lidos validos
cam

po

YEA -4712 to 9999 (excluyend Cualquier numero

R o el ano 0) entero distinto de

https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 38/211
11/3/2021 PL / SQL - Guía rápida

cero

ME
01 a 12 0 a 11
S

01 a 31 (limitado por valore

s de MES y AÑO, de acuer Cualquier numero

DAY do con las reglas del calen entero distinto de

dario para la con guracion cero

regional)

HO
00 a 23 0 a 23
RA

MIN
00 a 59 0 a 59
UTO

0 a 59,9(n), donde

SEG 00 a 59,9 (n), donde 9 (n) 9 (n) es la precisio

UN es la precision de la fraccio n del intervalo de

DO n de segundo de tiempo una fraccion de se

gundo

TIM -12 a 14 (el rango tiene en No aplicable

EZO cuenta los cambios de hor

NE_ ario de verano)

https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 39/211
11/3/2021 PL / SQL - Guía rápida

HO

UR

TIM

EZO

NE_ 00 a 59 No aplicable

MIN

UTE

TIM

EZO Encontrado en la vista de r

NE_ endimiento dinamico V $ T No aplicable

REG IMEZONE_NAMES

ION

TIM

EZO Encontrado en la vista de r

NE_ endimiento dinamico V $ T No aplicable

ABB IMEZONE_NAMES

Tipos de data de objetos grande


s (LOB) PL / SQL

https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 40/211
11/3/2021 PL / SQL - Guía rápida

Tipo de data de objetos grandes (LOB)se re ere a el


ementos de data grandes, como texto, imagenes gra
cas, videoclips y formas de onda de sonido. Los tip
os de data LOB permiten un acceso e ciente, aleato
rio y por partes a estos data. Estos son los tipos de d
ata LOB de PL / SQL prede nidos:

Tipo de d
Deion Tamano
ata

Se usa para almacenar o Depende del

bjetos binarios grandes e sistema. No p

BFILE n archivos en el sistema d uede superar

'operacion fuera de la bas los 4 gigabyt

e de data. es (GB).

Se usa para almacenar o


8 a 128 terab
BLOB bjetos binarios grandes e
ytes (TB)
n la base de data data.

Se utiliza para almacenar

grandes bloques de data


CLOB 8 a 128 TB
de caracteres en la base d

e data.

NCLOB Se utiliza para almacenar 8 a 128 TB

https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 41/211
11/3/2021 PL / SQL - Guía rápida

grandes bloques de data

NCHAR en la base de dat

a.

Subtipos PL / SQL de nidos por


el usuario
Un subtipo es un subconjunto de otro tipo de data, ll
amado su tipo base .Un subtipo tiene las mismas op
eraciones validas que su tipo base, pero solo un sub
conjunto de sus valores validos.

PL / SQL prede ne varios subtipos en el paquete ES


TÁNDAR . Por ejemplo, PL / SQL prede ne los subtip
os CHARACTER y INTEGER de la siguiente manera:

EL CARÁCTER DEL SUBTIPO ES CHAR; SUBTYPE IN


TEGER ES NUMBER (38,0);

Puede de nir y usar sus propios subtipos. El siguien


te programa demuestra la de nicion yusando un su
btipo de nido por el usuario -

DECLARE SUBTYPE name IS char (20); SUBTYPE m


ensaje IS varchar2 (100); nombre de saludo; mensaj
e de bienvenida; Saludo de INICIO: = 'Lector '; saludo

https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 42/211
11/3/2021 PL / SQL - Guía rápida

s: = 'Bienvenido al mundo de PL / SQL '; dbms_outpu


t.put_line ( 'Hola ' || saludos || saludos); FIN; /

Cuando el codigo anterior se ejecuta en el indicador


SQL, produce el siguiente resultado:

Hola lector Bienvenido al mundo del procedimiento


PL / SQL PL / SQL completado con exito.

NULL en PL / SQL
Los valores NULL de PL / SQL representan data falt
antes o desconocidos y no son un numero entero, c
aracter u otro tipo de data especi co. Tenga en cuen
ta que NULL no es lo mismo que una cadena de data
vacia o el valor de caracter nulo '0 ' . Se puede asign
ar un empate pero no se asimilaa nada, incluido el m
ismo.

PL / SQL - Variables

En este capitulo discutiremos las Variables en Pl / S


QL. Una variable no es mas que un nombre que se le
da a un area de almacenamiento que nuestros progr
amas pueden manipular. Cada variable en PL / SQL t
iene un tipo de data especi co, que determina el ta
mano y almacenamiento de la variable; el rango de

https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 43/211
11/3/2021 PL / SQL - Guía rápida

valores que se pueden almacenar en esta memoria


y el conjunto de operaciones que se pueden aplicar
a la variable.

El nombre de una variable PL / SQL consta de una le


tra seguida opcionalmente de varias letras, numero
s, signos de dolar, guiones bajos y signos numericos
y no debe exceder los 30 caracteres. De forma pred
eterminada, los nombres de las variables no disting
uen entre mayusculas y minusculas. No puede utiliz
ar una palabra clave PL / SQL reservada como nomb
re de variable.

El lenguaje de programacion PL / SQL le permite de


nir diferentes tipos de variables, como tipos dofech
a-hora, registros, colecciones, etc. que cubriremos e
n los siguientes capitulos. Para este capitulo, veamo
s solo los tipos basicos de variables.

Declaracion de variable en PL /
SQL
Las variables de PL / SQL deben declararse en la sec
cion de declaracion o en un paquete como variable g
lobal. Cuando declara una variable, PL / SQL asigna
memoria para el valor de la variable y la ubicacion d

https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 44/211
11/3/2021 PL / SQL - Guía rápida

e almacenamiento se identi ca por el nombre de la


variable.

La sintaxis para declarar una variable es -

variable_name [CONSTANT] tipo de data [NOT NUL


L] [: = | DEFAULT initial_value]

Donde, variable_name es un identi cador PL / SQL v


alido, tipo de data debe ser un tipo de data PL / SQL
valido o cualquier otro tipo de data de nido por el u
suario del que ya hablamos en el capitulo anterior. A
lgunas declaraciones de variables validas, asi como
qSu de nicion se presenta a continuacion:

numero de ventas (10, 2); pi doble precision CONSTA


NTE: = 3,1415; nombre varchar2 (25); direccion varch
ar2 (100);

Cuando especi ca un tamano, escala o limite de pre


cision con el tipo de data, esto se denomina declarac
ion restringida . Las declaraciones restringidas requ
ieren menos memoria que las declaraciones no restr
ingidas. Por ejemplo:

numero de ventas (10, 2); nombre varchar2 (25); dire


ccion varchar2 (100);

https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 45/211
11/3/2021 PL / SQL - Guía rápida

Inicializando variables en PL / S
QL
Cada vez que declara una variable, PL / SQL le asign
a un valor predeterminado de NULL. Si desea iniciali
zar una variable con un valor que no sea NULL, pued
e hacerlo mientras declara, utilizando uno de los sig
uientes metodos:

La palabra clave DEFAULT

El operador asignacion

Por ejemplo -

contador binary_integer: = 0; saludos varchar2 (20)


DEFAULT 'Que tengas un buen dia ';

Tambien puede especi car que una variable no deb


e tener un valor NULL utilizando la restriccion NOT N
ULL . Si esta utilizando la restriccion NOT NULL, deb
e asignar explicitamente un valor inicial a esta varia
ble.
https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 46/211
11/3/2021 PL / SQL - Guía rápida

Es una buena practica de programacion inicializar la


s variables correctamente, de lo contrario, los progra
mas a veces produciran resultados inesperados. Pru
ebe el siguiente ejemplo que usa diferentes tipos de
variables -

DECLARE un entero: = 10; b entero: = 20; c entero; re


al f; EMPEZAR c: = a + b; dbms_output.put_line ( 'Valo
r de c: ' || c); f: = 70,0 / 3,0; dbms_output.put_line ( 'Va
lor de f: ' || f); FIN; /

Cuando se ejecuta el codigo anterior, produce el sigu


iente resultado:

Valor de c: 30 Valor de f: 23.333333333333333333


Procedimiento PL / SQL completado con exito.

Alcance variable en PL / SQL


PL / SQL permite l Anidamiento de bloques, es decir,
cada bloque de programa puede contener otro bloq
ue interno. Si se declara una variable en un bloque i
nterno, no es accesible para el bloque externo. Sin e
mbargo, si una variable se declara y es accesible a u
n bloque externo, tambien es accesible a todos los b
loques internos anidados. Hay dos tipos de ambitos
de variable -

https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 47/211
11/3/2021 PL / SQL - Guía rápida

Variables locales : variables declaradas en un bloqu


e interno y no accesibles a bloques externos.

Variables globales - Variables declaradas en el bloq


ue mas externo o en un paquete.

El siguiente ejemplo muestra el uso de variables loc


ales y Global en su forma simple -

DECLARE - Numero de variables globales num1: = 9


5; numero num2: = 85; BEGIN dbms_output.put_line
( 'Variable externa num1: ' || num1); dbms_output.put
_line ( 'Variable externa num2: ' || num2); DECLARAR
- Numero de variables locales num1: = 195; numero n
um2: = 185; BEGIN dbms_output.put_line ( 'Variable i
nterna num1: ' || num1); dbms_output.put_line ( 'Varia
ble interna num2: ' || num2); FIN; FIN; /

Cuando se ejecuta el codigo anterior, produce el sigu


iente resultado:

Variable externa num1: 95 Variable externa num2: 8


5 Variable interna num1: 195 Variable interna num2:

https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 48/211
11/3/2021 PL / SQL - Guía rápida

185 Procedimiento PL / SQL completado con exito.

Asignacion de resultados de co
nsultas SQL a variables PL / SQ
L
Puede utilizar la instruccion SELECT INTO de SQL pa
ra asignar valores a variables PL / SQL. Para cada el
emento de la lista SELECT , debe haber una variable
correspondiente compatible con el tipo de la lista IN
TO . El siguiente ejemplo ilustra el diseno. Creemos
una tabla llamada CLIENTES -

( Para declaraciones SQL, consulte el tutorial de SQ


L)

CREAR CLIENTES DE TABLA (ID INT NO NULO, NOM


BRE VARCHAR (20) NO NULO, EDAD INT NO NULO,
DIRECCIÓN CHAR (25), SALARIO DECIMAL (18, 2), CL
AVE PRIMARIA (ID)); Tabla creada

Ahora insertemos algunos valores en la tabla -

INSERT INTO CLIENTES (ID, NOMBRE, EDAD, DIREC


CIÓN, SALARIO) VALORES (1, 'Ramesh ', 32, 'Ahmeda
bad ', 2000.00); INSÉRTESE EN LOS VALORES DEL
CLIENTE (ID, NOMBRE, EDAD, DIRECCIÓN, SALARIO)
(2, 'Khilan ', 25, 'Delhi ', 1500.00); INSERTAR LOS VA
https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 49/211
11/3/2021 PL / SQL - Guía rápida

LORES DEL CLIENTE (ID, NOMBRE, EDAD, DIRECCIÓ


N, SALARIO) (3, 'kaushik ', 23, 'Kota ', 2000.00); INS
ERTE LOS VALORES DEL CLIENTE (ID, NOMBRE, ED
AD, DIRECCIÓN, SALARIO) (4, 'Chaitali ', 25, 'Mumbai
', 6500.00); INSERTAR LOS VALORES DEL CLIENTE
(ID, NOMBRE, EDAD, DIRECCIÓN, SALARIO)(5, 'Hardi
k ', 27, 'Bhopal ', 8500,00); INSERTAR LOS VALORES
DEL CLIENTE (ID, NOMBRE, EDAD, DIRECCIÓN, SALA
RIO) (6, 'Komal ', 22, 'MP ', 4500.00);

El siguiente programa asigna los valores de la tabla


anterior a las variables PL / SQL usando la clausula
SELECT INTO de SQL -

DECLARE c_id customers.id% type: = 1; c_name custo


mers.name% type; c_addr customers.address% type;
c_sal customers.salary% type; COMIENCE SELECCIO
NAR nombre, direccion, salario EN c_name, c_addr, c_
sal DE clientes DONDE id = c_id; dbms_output.put_lin
e ( 'Cliente ' || nom_c || 'de ' || c_addr || 'gana ' || c_sal);
FIN; /

Cuando se ejecuta el codigo anterior, produce el sigu


iente resultado:

El cliente Ramesh de Ahmedabad gana 2000 PL / S


QL procedimiento completado con exito

https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 50/211
11/3/2021 PL / SQL - Guía rápida

PL / SQL - Constantes y literales

En este capitulo discutiremos constantes y literales


en PL/ SQL. Una constante contiene un valor que, un
a vez declarado, no cambia en el programa. Una decl
aracion constante especi ca su nombre, tipo de dat
a y valor y le asigna almacenamiento. La declaracio
n tambien puede imponer la restriccion NOT NULL .

Declaracion de una constante


Una constante se declara usando la palabra clave C
ONSTANT . Requiere un valor inicial y no permite mo
di car este valor. Por ejemplo:

PI CONSTANT NUMBER: = 3.141592654; DECLARE -


declaracion constante pi numero constante: = 3.1415
92654; - numero de departamento de otras declara
ciones (5.2); numero de diametro (5.2); numero de ci
rcunferencia (7, 2); numero de zona (10, 2); COMIENZ
O - radio de procesamiento: = 9.5; dia: = radio * 2; cir
cunferencia: = 2.0 * pi * radio; area: = pi * radio * radi
o; - salida dbms_output.put_line ( 'Radio: ' || radio); db
ms_output.put_line ( 'Diametro: ' || diametro); dbms_o
utput.put_line( 'Circunferencia: ' || circunferencia); db
ms_output.put_line ( 'Área: ' || area); FIN; /

https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 51/211
11/3/2021 PL / SQL - Guía rápida

Cuando el codigo anterior se ejecuta en el indicador


SQL, produce el siguiente resultado:

Radio: 9.5 Diametro : 19 Circunferencia: 59.69 Zona:


283.53 Procedimiento Pl / SQL completado con exit
o.

Literales PL / SQL
Un literal es un valor numerico, caracter, cadena o b
ooleano explicito no representado por un identi cad
or. Por ejemplo, TRUE, 786, NULL, 'tutorialspoint ' so
n todos literales de tipo booleano, numero o cadena.
PL / SQL, los literales distinguen entre mayusculas y
minusculas. PL / SQL admite los siguientes tipos de l
iterales:

1 Literales numericos

2 Literales de caracteres

3 Literales de cadena

4 Literales BOOLEAN

5 Literales de fecha y hora


https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 52/211
11/3/2021 PL / SQL - Guía rápida

La siguiente tabla proporciona ejemplos de todas es


tas categorias de valores literales.

S.No Tipo literal & Ejemplo

Literales numericos

050 78-14 0 +32767


1
6.6667 0.0 -12.0 3.14 159 +7800.00

6E5 1.0E- 8 3.14159e0 -1E38 -9.5e-3

Literales de caracteres
2
'A ' '% ' '9 ' '' 'z ' '( '

Literales de cadena

'¡Hola a todos! '


3
'Punto de tutoriales '

'19 -NOV- 12 '

Literales BOOLEAN
4
VERDADERO, FALSO y NULO.

https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 53/211
11/3/2021 PL / SQL - Guía rápida

5 Literales de fecha y hora

FECHA '1978-12-25 ';

TIMESTAMP '2012-10-29 12: 01: 01 ';

Para incrustar comillas simples en una cadena litera


l, coloque dos comillas simples una al lado de la otra
como se muestra en el siguiente programa -

DECLARE el mensaje varchar2 (30): = '¡Esto ' 's! '; BE


GIN dbm s_output.put_line (mensaje); FIN; /

Cuando el codigo anterior se ejecuta en el indicador


SQL, produce el siguiente resultado:

¡Es! El procedimiento PL / SQL se completo con exit


o.

PL / SQL - Operadores

En este capitulo, tenemos los operadores en PL / SQ


L. Un operador es un simbolo que le dice al compilad
or que realice una manipulacion matematica o logic
a especi ca. El lenguaje PL / SQL es rico en operado
res integrados y proporciona los siguientes tipos de
operadores:

https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 54/211
11/3/2021 PL / SQL - Guía rápida

1 Operadores aritmeticos

2 Operadores de relacionels

3 Operadores de comparacion

4 Operadores logicos

5 Operadores de cadena

Aqui entenderemos los operadores aritmeticos, rela


cional, comparativo y logico por uno. Los operadores
de cadenas se trataran en un capitulo posterior: PL /
SQL - Cadenas .

Operadores aritmeticos
La siguiente tabla muestra todos los operadores arit
meticos admitidos por PL / SQL. Suponga que varia
ble A contiene 10 y variable B contiene 5, luego -

Mostrar ejemplos

Operador Deion Ejemplo + Agregar dos operandos

A + B dara 15 - Reste el segundo operando del prim

https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 55/211
11/3/2021 PL / SQL - Guía rápida

ero A - B dara 5 * Multiplica los dos operandos A *

B dara 50 / Divida el numerador por el numerador

A / B dara 2 ** Operador de exponenciacion, eleva

un operando a la potencia de otro A ** B dara 100.0

00

Operadores relacionales
Los operadores relacionales comparan dos expresio
nes o valores y devuelven un resultado booleano. La
siguiente tabla muestra todos los operadores relaci
onales compatibles con PL / SQL. Suponga que vari
able A contiene 10 y variable B contiene 20, luego -

Mostrar ejemplos

< td style = "vertical-align: middle; "> Comprueba si l

os valores de dos operandos son iguales o no, si los

valores no son iguales, la condicion se vuelve verda

dera.

O Deion Ejem

pe plo

ra

https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 56/211
11/3/2021 PL / SQL - Guía rápida

do

(A =
Comprueba si los valores de dos operand
B) no
= os son iguales o no, si es asi, la condicion
es cie
se vuelve verdadera.
rto.

!=

~ (A! = B) es verdadero.
=

Comprueba si el valor del operando izqui (A> B)

erdo es mayor que el valor del operando no es


>
derecho, si es asi, la condicion se vuelve v ciert

erdadera. o.

Comprueba si el valor del operando izqui

erdo es menore al valor del operando der


< (A
echo, si es asi, la condicion se vuelve verd

adera.

> Comprueba si el valor del operando izqui (A> =

= erdo es mayor o igual que el valor del op B) no

https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 57/211
11/3/2021 PL / SQL - Guía rápida

erando derecho, si es asi, la condicion se es cie

convierte en verdadera. rto.

Comprueba si el valor del operando izqui (A <=

erdo es menor o igual que el valor del op B) es


<=
erando derecho, si es asi, la condicion se verda

vuelve verdadera. dero

Operadores de comparacion
Los operadores de comparacion se utilizan para com
parar una expresion con otra. El resultado es siempr
e TRUE, FALSE o NULL .

Mostrar ejemplos

r
Deion Ejemplo
a

https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 58/211
11/3/2021 PL / SQL - Guía rápida

L El operador LIKE compara u Si 'Zara Ali ' like 'Z%

I n caracter, cadena o valor C A_i 'devuelve un boo

K LOB con un patron y devuel leano verdadero, po

E ve TRUE si el valor coincide r lo que ' Nuha Ali 'c

con el modelo y FALSO si n omo ' Z% A_i 'devuel

o. ve un booleano fals

o.

B Si x = 10 entonces, x

E El operador BETWEEN com entre 5 y 20 devuel

T prueba si un valor esta dent ve verdadero, x entr

Wro de un rango especi cad e 5 y 10 devuelve ve

E o. x ENTRE ayb signi ca qu rdadero, pero x entr

E e x> = a y x <= b. e 11 y 20 devuelve f

N also.

Si x = 'm ' entonces,


El operador IN prueba la pe
x en ( 'a ', 'b ', 'c ') de
rtenencia del conjunto. x IN
I vuelve booleano fal
(conjunto) signi ca que x es
N so pero x in ( 'm ', 'n
igual a cualquier miembro d
', 'o ') devuelve bool
el conjunto.
eano verdadero.

I El operador IF NULL devuel Si x = ' m ', entonces


https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 59/211
11/3/2021 PL / SQL - Guía rápida

S ve el valor BOOLEAN TRUE 'x es nulo ' devuelve

N si su operando es NULL o F booleano falso.

U ALSE s 'no es NULL. Las co

L mparaciones que involucra

L n valores NULL siempre da

n NULL.

Operadores logicos
La siguiente tabla muestra los operadores logicos a
dmitidos por PL / SQL. Todos estos operadores trab
ajar en operandos booleanos y producirResultados
booleanos. Supongamos que variable A es verdader
a y variable B es falsa, entonces -

Mostrar ejemplos

p
Eje
er
Deion mplo
a
s
d

or

y Han llamado al operador logico AND. Si a (A y


https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 60/211
11/3/2021 PL / SQL - Guía rápida

mbos operandos son verdaderos, la condic B) es

ion se convierte en verdadera. incor

rect

o.

(A o

Llamado al operador gical OR. Si cualquier B) es

o a de los dos operandos es verdadero, la co verd

ndicion se vuelve verdadera. ader

o.

no
Llamado al operador logico NOT. Usado pa
(A y
n ra revertirel estado logico de su operando.
B) es
o Si una condicion es verdadera, entonces el
ciert
operador logico NOT la convertira en falsa.
o.

Prioridad de los operadores PL /


SQL
La prioridad de los operadores determina la agrupac
ion de terminos en una expresion. Esto afecta la for
ma en que se evalua una expresion. Algunos operad
ores tienen una prioridad mas alta que otros; por eje

https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 61/211
11/3/2021 PL / SQL - Guía rápida

mplo, el operador de multiplicacion tiene mayor prio


ridad que el operador de suma.

Por ejemplo, x = 7 + 3 * 2 ; aqui, x obtiene 13 , no 20


porque el operador * tiene una prioridad mayor que
+, por lo que primero se multiplica por 3 * 2 luego ag
regue 7 .

Aqui, los operadores con la prioridad mas alta apare


cen en la parte superior de la tabla, los que tienen la
menor prioridad aparecen en la parte inferior. En un
a expresion, los operadores con mayor precedencia
se evaluaran primero.

La prioridad del operador essiguiente: =, <,>, <=,> =, ,!


=, ~ =, ^ =, ES NULO, ME GUSTA, ENTRE, EN.

Mostrar ejemplos

Operador Operacion

** exponenciacion

+, - identidad , negacion

*, / multiplicacion,

+, -, || suma, resta, concatenacion

comparacion

NO negacion logica

https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 62/211
11/3/2021 PL / SQL - Guía rápida

Y conjuncion

O inclusion

PL / SQL - Condiciones

En este capitulo, discutiremos las condiciones en PL


/ SQL. EstructurasLa toma de decisiones requiere qu
e el programador especi que una o mas condicione
s para ser evaluadas o probadas por el programa, as
i como una o mas instrucciones para ser ejecutadas
si la condicion es verdadera, y posiblemente otras in
strucciones para ser ejecutadas si la condicion se co
nsidera falsa.

Esta es la forma general de una estructura condicio


nal tipica (es decir, toma de decisiones) que se encu
entra en la mayoria de los lenguajes de programaci
on -

https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 63/211
11/3/2021 PL / SQL - Guía rápida

El lenguaje de programacion PL / SQL proporciona l


os siguientes tipos de declaraciones de decision. Ha
ga clic en los siguientes enlaces para veri car su det
alle.

S.

N Declaracion y deion

1 IF - THEN instruccion

La instruccion IF asocia una condicion con una se


cuencia de declaraciones rodeadas por las palabr
as clave THEN y END IF . Si la condicion es verdad

https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 64/211
11/3/2021 PL / SQL - Guía rápida

era,las instrucciones se ejecutan y si la condicion


es falsa o NULL, la instruccion IF no hace nada.

Declaracion IF-THEN -ELSE

instruccion IF agrega la palabra clave ELSE segui


da de una secuencia alternativa de declaraciones.
2 Si la condicion es falsa o NULL, solo se ejecuta la
secuencia alternativa de instrucciones. Esto aseg
ura que se ejecute una u otra de las secuencias d
e instrucciones.

Declaracion IF-THEN -ELSIF


3
Te permite elegir entre varias alternativas.

Declaracion de caso

Al igual que la sentencia IF, la sentencia CASE sel


ecciona una secuencia de sentencias que se ejecu
taran.
4
Sin embargo, para seleccionar la secuencia, la ins
truccion CASE usa unselector en lugar de multiple
s expresiones booleanas. Un selector es una expr
esion cuyo valor se usa para seleccionar una de v
arias alternativas.

https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 65/211
11/3/2021 PL / SQL - Guía rápida

5 Se busca la declaracion CASE

La instruccion CASE buscada no tiene selector , y


sus clausulas WHEN contienen condiciones de bu
squeda que devuelven valores booleanos.

anidado IF-THEN -ELSE

Puede utilizar una instruccion IF-THEN o IF-THEN


6
-ELSIF en otra instruccion IF-THEN o IF-THEN-EL
SIF instruccion (es).

PL / SQL - Bucles

En este capitulo, discutiremos los bucles en PL / SQ


L. Puede haber ocasiones en las que necesite ejecut
ar un bloque de codigo mas de una vez. En general, l
as instrucciones se ejecutan secuencialmente: la pri
meraLa instruccion de una funcion se ejecuta primer
o, seguida de la segunda, y asi sucesivamente.

Los lenguajes de programacion proporcionan

Una instruccion de bucle nos permite ejecutar una in


struccion o un grupo de instrucciones varias veces y
esta es la forma general de una instruccion de bucle
en la mayoria de los lenguajes de programacion -

https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 66/211
11/3/2021 PL / SQL - Guía rápida

PL / SQL proporciona los siguientes tipos de bucles


para manejar los requisitos del bucle. Haga clic en lo
s siguientes enlaces para veri car sus detalles.

S.

N Tipo de bucle y deion

PL / SQL Basic LOOP

En esta estructura de bucle, la secuencia de se col


oca entre las sentencias LOOP y END LOOP. En ca
1
da iteracion, se ejecuta la secuencia de instruccio
nes y luego el control reprterminar en la parte su
perior del bucle.

https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 67/211
11/3/2021 PL / SQL - Guía rápida

2 PL / SQL MIENTRAS LOOP

Repite una declaracion o un grupo de declaracion


es siempre que una condicion determinada sea v
erdadera. Prueba la condicion antes de ejecutar el
cuerpo del bucle.

PL / SQL PARA LOOP

Ejecuta una secuencia de instrucciones varias vec


3
es y abrevia el codigo que maneja la variable de b
ucle.

Bucles anidados en PL / SQL

4 Puede utilizar uno o mas bucles en cualquier otro


bucle basico, while o for.

Etiquetado de un bucle PL / SQL


Los bucles PL / SQL se pueden etiquetar. La etiqueta
debe estar rodeada por corchetes dobles (<>) y apar
ecer al comienzo de la instruccion LOOP. El nombre
de la etiqueta tambien puede sertambien aparecen
al nal de la instruccion LOOP. Puede usar la etiquet
a en la declaracion EXIT para salir del ciclo.

https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 68/211
11/3/2021 PL / SQL - Guía rápida

El siguiente programa demuestra el concepto -

DECLARE i number (1); j numero (1); BEGIN << extern


al_loop >> FOR i IN 1..3 LOOP <> FOR j IN 1..3 LOOP d
bms_output.put_line ( 'i es: ' || i || 'y j es: " || j); END loo
p inner_loop; END loop external_loop; FIN; /

Cuando t El codigo anterior se ejecuta en el indicado


r SQL, produce el siguiente resultado:

i es: 1 y j es: 1 i es: 1 y j es: 2 i es: 1 y j es: 3 i es: 2 y j e


s: 1 i es: 2 y j es: 2 i es: 2 y j es: 3 i es: 3 yj es: 1 i es: 3
yj es: 2 i es: 3 yj es: 3 El procedimiento PL / SQL se c
ompleto correctamente.

Sentencias de control de bucle


Las sentencias de control de bucle modi can la ejec
ucion de su secuencia normal. Cuando la ejecucion s
ale de un eforzado, todos los objetos automaticos q
ue se crearon en ese ambito se destruyen.

PL / SQL admite las siguientes declaraciones de con


trol. Los bucles de etiquetas tambien ayudan a obte
ner control fuera de un bucle. Haga clic en los siguie
ntes enlaces para veri car sus detalles.

S. Declaracion de control y deion

https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 69/211
11/3/2021 PL / SQL - Guía rápida

Sentencia sentencia EXIT

La sentencia Exit completa el ciclo y el control sal


1
ta a la sentencia inmediatamente despues del cic
lo nal.

declaracion CONTINUE

Obliga al bucle a ignorar el resto de su cuerpo e i


2
nmediatamente volver a probar su estado antes
de repetir.

Instruccion GOTO

Trans ere el control a la instruccion etiquetada. A


3
unque no se recomienda utilizar la instruccion GO
TO en su programa.

PL / SQL - Cadenas

La cadena PL / SQL es en realidad una secuencia de


caracteres con una especi cacion de tamano opcion
al. Los caracteres pueden ser numeros, letras, espac

https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 70/211
11/3/2021 PL / SQL - Guía rápida

ios en blanco, caracteres especiales o una combinaci


on de todos. PL / SQL ofrece tres tipos de cadenas:

Cadenas de longitud ja - En tales cadenas, los prog


ramadores especi can longitud cuando se declara la
cadena. La cadena se rellena a la derecha con espac
ios de la longitud especi cada.

Cadenas de longitud variable : en estas cadenas, un


a longitud maxima de hasta 32.767, porque la caden
a esta especi cada y no se rellena 'tiene lugar.

Objetos de caracteres grandes (CLOB) : son cadenas


Nidos de longitud variable que pueden ser de hasta
128 terabytes.

Las cadenas PL / SQL pueden ser variables o literale


s. Un literal de cadena se encierra entre comillas. Po
r ejemplo,

https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 71/211
11/3/2021 PL / SQL - Guía rápida

'Este es un literal de cadena. 'O ' hola mundo '

Para incluir una comilla simple en una cadena literal,


debe escribir dos comillas simples una al lado de la
otra. Por ejemplo,

'esto no es ' 'como se ve '

Declarar variables de cadena


La base de data de Oracle proporciona muchos tipos
de data de tipo cadena, como CHAR, NCHAR, VARCH
AR2, NVARCHAR2, CLOB y NCLOB. Los tipos de data
precedidos por un 'N ' son tipos de data de 'juego de
caracteres nacionales ' , que almacenan data de car
acteres Unicode.

Si necesita declarar una cadena de longitud variabl


e, debe proporcionar la longitud maxima de csu cad
ena. Por ejemplo, el tipo de data VARCHAR2. El sigui
ente ejemplo ilustra la declaracion y el uso de algun
as variables de cadena -

DECLARE name varchar2 (20); empresa varchar2 (3


0); introduccion clob; caracter de eleccion (1); BEGIN
nombre: = 'John Smith '; empresa: = 'Infotech '; introd
uccion: = '¡Hola! Soy John Smith de Infotech. '; elecci
on: = 'y '; SI eleccion = 'y ' ENTONCES dbms_output.p

https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 72/211
11/3/2021 PL / SQL - Guía rápida

ut_line (nombre); dbms_output.put_line (empresa); d


bms_output.put_line (introduccion); TERMINARA SI;
FIN; /

Cuando el codigo anterior se ejecuta en el indicador


SQL, produce el siguiente resultado:

John Smith Infotech ¡Hola! Soy John Smith de Infote


ch. El procedimiento PL / SQL se completo correctam
ente

Para declarar una cadena gth de longitud ja, use el


tipo de data CHAR. Aqui, no es necesario especi car
una longitud maxima para una variable de longitud
ja. Si omites la contrainte length, Oracle Database
utiliza automaticamente una longitud maxima requ
erida. Las siguientes dos declaraciones son identica
s-

red_ ag CHAR (1): = 'Y '; bandera_roja CHAR: = 'Y ';

Operadores y funciones de cad


ena PL / SQL
PL / SQL proporciona el operador de concatenacion
(||) para unir dos cadenas. La siguiente tabla propor
ciona las funciones de cadena proporcionadas por P
L / SQL -

https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 73/211
11/3/2021 PL / SQL - Guía rápida

S.

N Funcion y proposito

ASCII (x);
1
Devuelve el valor ASCII del caracter x.

CHR (X);
2
Devuelve el caracter con el valor ASCII de x.

CONCAT (x, y);

3 Concatena las cadenas xey y devuelve la cadena

agregada.

INITCAP (X);

4 Convierte la letra inicial de cada palabra de xa m

ayuscula y devuelve esa cadena.

INSTR (x, cadena_buscar [, inicio] [, ocurrencia]);

5 Busca nd_string en x y devuelve la posicion en l

a que aparece.

https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 74/211
11/3/2021 PL / SQL - Guía rápida

6 INSTRB (X);

Devuelve la ubicacion de una cadena dentro de o


tra cadena, pero devuelve el valor en bytes.

LONGITUD (X);
7
Devuelve el numero de caracteres entre x.

LONGITUD B (x);

8 Devuelve la longitud de una cadena en bytes par

a un conjunto de caracteres de bytes.

INFERIOR (X);

9 Convierta letras entre x a minusculas y devuelva

esta cadena.

LPAD (x, ancho [, pad_string]);


1
Pads x con espacios a la izquierda, para llevar la l
0 ongitud total de la cadena al ancho de los caracte
res.

11
LTRIM (x [, trim_string]);

https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 75/211
11/3/2021 PL / SQL - Guía rápida

Corta los caracteres de la izquierda de x .

NANVL (x, valor);


1
Devuelve el valor si x coincide con el valor especi
2 al NaN (no un numero); de lo contrario, se devuel
ve x .

NLS_INITCAP (x);
1
Igual que la funcion INITCAP excepto que puede
3 usar un metodo de clasi cacion diferente segun l
o especi cado por NLSSORT.

NLS_LOWER (X);
1
Igual que la funcion LOWER excepto que puede
4 usar un metodo de clasi cacion diferente segun l
o especi cado por NLSSORT.

NLS_UPPER (X);
1
Igual que la funcion SUPERIOR, excepto que pue
5 de usar un metodo de clasi cacion diferente seg
un lo especi cado por NLSSORT.

1
NLSSORT (X);
https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 76/211
11/3/2021 PL / SQL - Guía rápida

6 Cambia la forma en que se ordenan los caractere


s. Debe especi carse antes de cualquier funcion
NLS; de lo contrario, se utilizara la clasi cacion pr
edeterminada.

NVL (x, value);


1
Devuelve el valor si x es nulo; de lo contrario, se d
7
evuelve x.

NVL2 (x, value1, value2);


1
Devuelve value1 si xn 'es no es cero; si x es cero, s
8
e devuelve valor2.

REPLACE (x, search_string, replace_string);


1
Buscar x search_string y reemplazarlo con replac
9
e_string.

2 RPAD (x, width [, pad_string]);

0 Rellenar x a la derecha.

2
RTRIM (x [, trim_string]);
1
Cortar x desde la derecha.
https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 77/211
11/3/2021 PL / SQL - Guía rápida

SOUNDEX (X);
2
Devuelve una cadena que contiene la representa
2
cion fonetica de x .

SUBSTR (x, inicio [, longitud]);

2 Devuelve una subcadena de x que comienza en l


a posicion especi cada por inicio. Se puede prop
3
orcionar una longitud opcional para la subcaden
a.

SUBSTRB (X);
2
Igual que SUBSTR excepto que los parametros s
4 e expresan en bytes en lugar de caracteres para l
os sistemas de caracteres de un solo byte.

TRIM ([trim_char FROM) x);


2
Corta los caracteres a la izquierda y a la derecha
5
de x.

2
SUPERIOR (x);
6
Convierte letras en x a mayusculas y devuelve es
ta cadena.
https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 78/211
11/3/2021 PL / SQL - Guía rápida

Ahora trabajemos con algunos ejemplos para enten


der el concepto -

Ejemplo 1

DECLARAR saludos varchar2 (11): = 'hola mundo '; BE


GIN dbms_output.put_line (UPPER (saludar a las entr
adas)); dbms_output.put_line (INFERIOR (saludos)); d
bms_output.put_line (INITCAP (saludos)); / * obtiene
el primer caracter de la cadena * / dbms_output.put_l
ine (SUBSTR (saludos, 1, 1)); / * obtiene el ultimo cara
cter de la cadena * / dbms_output.put_line (SUBSTR
(saludos, -1, 1)); / * obtiene cinco caracteres de la sept
ima posicion. * / dbms_output.put_line (SUBSTR (sal
udos, 7, 5)); / * obtiene el resto de la cadena, comenz
ando en la segunda posicion. * / dbms_output.put_lin
e (SUBSTR (saludos, 2)); / * encuentra la ubicacion d
e la primera "e " * / dbms_output.put_line (INSTR (sal
udos, 'e ')); FIN; /

Cuando el codigo anterior se ejecuta en el indicador


SQL, produce el siguiente resultadot -

HELLO WORLD hola mundo Hola mundo hd World el


lo World 2 Procedimiento PL / SQL completado con e
xito.
https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 79/211
11/3/2021 PL / SQL - Guía rápida

Ejemplo 2

DECLARAR saludos varchar2 (30): = '...... Hola mundo


..... '; BEGIN dbms_output.put_line (RTRIM (saludos, '.
')); dbms_output.put_line (LTRIM (saludos, '. ')); dbms
_output.put_line (TRIM ( '. ' saludos)); FIN; /

Cuando el codigo anterior se ejecuta en el indicador


SQL, produce el siguiente resultado:

...... Hello World Hello World ..... El procedimiento de


PL / SQL de Hello World se completo correctamente.

PL / SQL - Tablas

En este capitulo, tenemos las tablas en PL / SQL. El l


enguaje de programacion PL / SQL proporciona una
estructura de data llamada VARRAY , que puede al
macenar una coleccion secuencial de tamano jo de
elementos del mismo tipo. Un varray se usa para al
macenar una coleccion ordonnacen de data, pero a
menudo es mejor pensar en una matriz como una co
leccion de variables del mismo tipo.

Todos los varrays estan formados por ubicaciones d


e memoria contiguas. La direccion mas baja corresp

https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 80/211
11/3/2021 PL / SQL - Guía rápida

onde al primer elemento y la direccion mas alta al ul


timo elemento.

Una matriz es parte de los data de tipo coleccion y r


epresenta matrices de diferentes tamanos. Veremos
otros tipos de colecciones en un capitulo posterior 'C
olecciones PL / SQL ' .

Cada elemento de un varray tiene un indice con. Ta


mbien tiene un tamano maximo que se puede cambi
ar dinamicamente.

Creacion de un tipo Varray


Un tipo varray se crea con la instruccion CREATE TY
PE . Debe especi car el tamano maximo y el tipo de
https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 81/211
11/3/2021 PL / SQL - Guía rápida

elementos almacenados en el varray.

La sintaxis basica para crear un tipo VARRAY en el n


ivel de esquema es -

CREAR O REEMPLAZAR TYPE varray_type_name ES


VARRAY (n) de

Donde,

1 varray_type_name es un nombre
de atributo valido,

2 n es el numero (maximo) de ele


mentos en el varray,

3 element_type es el tipo de data


de los elementos del arreglo.

El tamano maximo de un varray se puede cambiar u


sando la instruccion ALTER TYPE .

Por ejemplo,

CREATE o REPLACE TYPE namearray AS VARRAY


(3) DE VARCHAR2 (10); / Tipo creado.

https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 82/211
11/3/2021 PL / SQL - Guía rápida

La sintaxis basica para crear un tipo VARRAY en un


bloque PL / SQL es -

TYPE varray_type_name IS VARRAY (n) de

Por ejemplo -

TYPE namearray ES VARRAY (5) OF VARCHAR2 (10);


ES VARRAY (5) DE grados de tipo INTEGER;

Ahora trabajemos con algunos ejemplos para enten


der el concepto -

Ejemplo 1

El siguiente programa demuestra el uso devarrays -

DECLARAR matriz de nombres de tipo ES VARRAY


(5) OF VARCHAR2 (10); EST VARRAY (5) DE grados I
NTEGER; nombres matriz de nombres; marcar las no
tas; entero total; BEGIN nombres: = matriz de nombr
es ( 'Kavita ', 'Pritam ', 'Ayan ', 'Rishav ', 'Aziz '); nota
s: = notas (98, 97, 78, 87, 92); total: = names.count; d
bms_o utput.put_line ( 'Total ' || total || 'Estudiantes ');
FOR i en 1 .. bucle total dbms_output.put_line ( 'Estud
iante: ' || nombres (i) || 'Marcas: ' || marcas (i)); END L
OOP; FIN; /

https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 83/211
11/3/2021 PL / SQL - Guía rápida

Cuando el codigo anterior se ejecuta en el indicador


SQL, produce el siguiente resultado:

Total 5 estudiantes Estudiante: Kavita Grados: 98 Al


umno: Puntos Pritam: 97 Alumno: Puntos Ayan: 78
Alumno: Rishav Grados: 87 Alumno: Puntos Aziz: 92
Procedimiento exitoso de PL / SQL.

Nota -

En el entorno de Oracle, el indice inicial de varrays e


s siempre 1.

Puede inicializar elementos varray usando el metod


o constructor de tipo varray, que tiene el mismo no
mbre que varray.

Las varrays son matrices unidimensionales.

4
https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 84/211
11/3/2021 PL / SQL - Guía rápida

Una varray es automaticamente NULL cuando se de


clara y debe inicializarse antes de que se pueda hac
er referencia a sus elementos.

Ejemplo 2

Los elementos de un varray tambien pueden ser u


n% ROWTYPE de cualquier tabla de base de data
o% TIPO de cualquier campo de la tabla de la base d
e data. El siguiente ejemplo ilustra el concepto.

Usaremos la tabla CUSTOMERS almacenada en nue


stra base de data como -

Seleccionar * entre clientes; + ---- + ---------- + ----- + -


---------- + ---------- + | ID | NOMBRE | EDAD | DIRECCI
ON | SALARIO | + ---- + ---------- + ----- + ----------- + ---
------- + | 1 | Ramesh | 32 | Ahmedabad | 2000,00 | |
2 | Khilan | 25 | Delhi | 1500,00 | | 3 |kaushik | 23 | Ko
ta | 2000,00 | | 4 | Chaitali | 25 | Mumbai | 6.500,00
| | 5 | Hardik | 27 | Bhopal | 8.500,00 | | 6 | Komal | 2
2 | MP | 4.500,00 | + ---- + ---------- + ----- + -----------
+ ---------- +

El siguiente ejemplo utiliza cursor , que estudiara en


detalle en un capitulo aparte.

https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 85/211
11/3/2021 PL / SQL - Guía rápida

DECLARE CURSOR c_customers es SELECCIONAR el


nombre de los clientes; type c_listes varray (6) de tip
o customers.name%; name_li st c_list: = c_list contad
or de enteros: = 0; BEGIN FOR n IN c_customers Cont
ador de LOOP: = contador + 1; name_list.extend; nom
bre_lista (contador): = n. nombre; dbms_output.put_li
ne ( 'Cliente (' || contador || '): ' || nombre_lista (contad
or)); END LOOP; FIN; /

Cuando el codigo anterior se ejecuta en el indicador


SQL, produce el siguiente resultado:

Cliente (1): Ramesh Cliente (2): Cliente Khilan (3): Clie


nte kaushik (4): Cliente Chaitali (5): Cliente Hardik
(6): Procedimiento Komal PL / SQL completado con e
xito.

PL / SQL - Procedimientos

En este capitulo tenemos los procedimientos en PL /


SQL. Una subrutina es un modulo de unidad / progr
ama que realiza una tarea en particular. Estos subpr
ogramas se combinan para formar programas mas a
mplios. Esto se denomina basicamente "diseno mod
ular". Una subrutina puede ser llamada por otra subr
utina o programa llamado programa de llamada .

Se puede crear una subrutina -


https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 86/211
11/3/2021 PL / SQL - Guía rápida

1 Nivel de esquema

2 En un paquete

3 En un bloque PL / SQL

A nivel de esquema, la subrutina es una subrutina i


ndependiente . Se crea con la instruccion CREATE P
ROCEDURE o CREATE FUNCTION. Se almacena en la
base de data y se puede eliminar con la instruccion
DROP PROCEDURE o DROP FUNCTION.

Una subrutina creada dentro de un paquete es una


subrutina incorporada .Se almacena en la base de d
ata y solo se puede eliminar cuando el paquete se el
imina con la instruccion DROP PACKAGE. Discutirem
os los paquetes en el capitulo 'PL / SQL - Paquetes '
.

Las subrutinas PL / SQL se denominan bloques PL /


SQL a los que se puede llamar con un conjunto de p
arametros. PL / SQL proporciona dos tipos de subrut
inas:

https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 87/211
11/3/2021 PL / SQL - Guía rápida

Funciones : estas subrutinas devuelven un solo valo


r; Se utiliza principalmente para calcular y devolver
un valor.

Procedimientos : estas subrutinas no devuelven un


valor directamente; utilizado principalmente para re
alizar una accion.

Este capitulo cubre aspectos importantes de un proc


edimiento PL / SQL . Discutiremos la funcion PL / S
QL en el proximo capitulo.

Partes de una subrutina PL / SQ


L
Cada subrutina PL / SQL tiene un nombre y tambien
se puedetener una lista de parametros. Al igual que
los bloques PL / SQL anonimos, los bloques con nom
bre tambien tendran las siguientes tres partes:

S.

N Piezas y deion

https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 88/211
11/3/2021 PL / SQL - Guía rápida

1 Parte declarativa

Esta es una parte opcional. Sin embargo, la parte


declarativa de una subrutina no comienza con la
palabra clave DECLARE. Contiene declaraciones d
e tipos anidados, cursores, constantes, variables,
excepciones y subrutinas. Estos elementos son lo
cales a la subrutina y dejan de existir cuando la s
ubrutina termina de ejecutarse.

Parte ejecutable

2 Esta es una parte requerida y contiene instruccio

nes que realizan la accion designada.

Manejo de excepciones

3 Esta es nuevamente una parte opcional. Contiene


el codigo que maneja errores en tiempo de ejecuci
on.

Creando un procedimiento
Se crea un procedimiento con CREATE OR Sentencia
REPLACE PROCEDURE La sintaxis simpli cada para
la sentencia CREATE OR REPLACE PROCEDURE es l
a siguiente:
https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 89/211
11/3/2021 PL / SQL - Guía rápida

CREATE [OR REPLACE] PROCEDURE nombre_proced


imiento [(nombre_parametro [ IN | OUT | IN OUT] tip
o [, ...])] {EST | AS} BEGIN END name_procedure;

Donde,

nombre-procedimiento especi ca el nombre del pro


cedimiento.

La opcion [OR REPLACE] permite la modi cacion de


'un procedimiento existente.

La lista de parametros opcionales contiene el nombr


e, modo y tipos de los parametros. IN representa el
valor que se transmitira desde el exterior y OUT repr
esenta el parametrosera que se utilizara para devol
ver un valor fuera del procedimiento.

4
https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 90/211
11/3/2021 PL / SQL - Guía rápida

procedimiento-cuerpo contiene la parte ejecutable.

La palabra clave AS se utiliza en lugar de la palabra


clave IS para crear un procedimiento independiente.

Ejemplo

El siguiente ejemplo crea un procedimiento simple q


ue muestra la cadena '¡Hola mundo! 'En pantalla cua
ndo se ejecuta.

CREAR O REEMPLAZAR el PROCEDIMIENTO saludo


s AL COMIENZO dbms_output.put_line ( '¡Hola mund
o! '); FIN; /

Cuando el codigo anterior se ejecuta usando el indic


ador SQL, producira el siguiente resultado:

Procedimiento creado.

Ejecucion de un procedimiento i
ndependiente
Se puede llamar a un procedimiento independiente
de dos formas:
https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 91/211
11/3/2021 PL / SQL - Guía rápida

Usando la palabra clave EXECUTE

Llamando el nombre del procedimiento desde un bl


oque PL / SQL

El profesional 'saludos ' con el nombre anterior se p


uede llamar con la palabra clave EXECUTE como -

EXECUTE greetings;

La llamada anterior dara como resultado -

El procedimiento PL / SQL Hello World se completo c


orrectamente.

El procedimiento tambien se puede llamar desde otr


o bloque PL / SQL -

BEGIN greetings; FIN; /

La llamada anterior dara como resultado -

Procedimiento de Hello World PL / SQL completado


con exito.

https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 92/211
11/3/2021 PL / SQL - Guía rápida

Eliminacion de un procedimient
o independiente
Un procedimiento independiente se elimina con la in
struccion DROP PROCEDURE . La sintaxis para elimi
nar un procedimiento es -

DROP PROCEDURE nombre-procedimiento;

Puede eliminar el procedimiento de saludos utilizan


do la siguiente declaracion:

DROP PROCEDURE saludos;

Modos de pparametros en subr


utinas PL / SQL
La lista en la siguiente tabla muestra los modos de p
arametro en subrutinas PL / SQL -

S.

N Modo de parametro & Deion

1
IN

https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 93/211
11/3/2021 PL / SQL - Guía rápida

Un parametro IN le permite pasar un valor a la su


brutina. Este es un parametro de solo lectura . De
ntro de la subrutina, un parametro IN actua como
una constante. No puede recibir valor. Puede pasa
r una constante, un literal, una variable inicializad
a o una expresion como parametro IN. Tambien p
uede inicializarlo a un valor predeterminado; sin e
mbargo, en este caso se omite de la llamada de s
ubrutina. Este es el modo predeterminado para p
asar parametros. Los parametros se pasan por re
ferencia .

OUT

Un parametro OUT devuelve un valor para el prog


rama de llamada. Dentro de la subrutina, un para
2 metro OUT actua como una variable. Puede editar

su valor y hacer referencia al valor despues de asi


gnarlo. El parametro real debe ser variable y se p
asa por valor .

3
IN OUT

Un parametro IN OUT pasa un valor inicial a una s


ubrutina y devuelve un valor actualizado al llama
dor. Se le puede asignar un valor y se puede leer
el valor.
https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 94/211
11/3/2021 PL / SQL - Guía rápida

El parametro real correspondiente a un parametr


o formal IN OUT debe ser una variable, no una co
nstante o una expresion. Se debe asignar un valo
r al parametro formal. El parametro real se pasa p
or valor.

Ejemplo 1 de modo IN & OUT

Este programa encuentra el minimode dos valores.


Aqui, el procedimiento toma dos numeros en modo I
N y devuelve su minimo usando los parametros OU
T.

DECLARAR un numero; numero b; numero c; PROCE


DIMIENTO ndMin (x numero de ENTRADA, y nume
ro de ENTRADA, z numero de SALIDA) ES INICIO SI x

Cuando el codigo anterior se ejecuta en el indicador


SQL, produce la siguiente salida:

Minimo de (23, 45): 23 Procedimiento PL / SQL com


pletado con exito.

Ejemplo 2 de modo IN & OUT

Este procedimiento calcula el cuadrado del valor de


un valor pasado. Este ejemplo muestra como podem
https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 95/211
11/3/2021 PL / SQL - Guía rápida

os usar el mismo parametro para aceptar un valor y


luego devolver otro resultado.

DECLARE un numero ; PROCEDIMIENTO squareNum


(x IN OUT numero) IS BEGIN x: = x * x; END; BEGIN a:
= 23; squareNum (a); dbms_output.put_line ( 'Cuadra
do de (23): ' || a); FIN; /

Cuando el codigo anterior se ejecuta en el indicador


SQL, produce el siguiente resultado:

Cuadrado de (23): 529 Procedimiento PL / SQL comp


letado con exito.

Metodos para pasar parametro


s
Los parametros reales se pueden pasar de tres form
as:

1 Notacion posicional

2 Notacion con nombre

3 Notacion mixta

https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 96/211
11/3/2021 PL / SQL - Guía rápida

Notacion posicional

En notacion posicional, puede llamar al procedimien


to como -

ndMin (a, b, c, d);

En notacion posicional, el primer parametro real se r


eemplaza por el primer parametro formal; el segund
o parametro real se reemplaza por el segundo para
metro formal, y asi sucesivamente. Por lo tanto, a se
reemplaza por x, b se reemplaza por y, c se reempla
za por z y d reemplaza a m .

Notation named
En notacion con nombre, el parametro real se asocia
con el parametro formal usando el simbolo de ech
a (=>) . La llamada al procedimiento sera la siguient
e:

ndMin (x => a, y => b, z => c, m => d);

Notacion mixta

En notacion mixta, puede mezclar las dos notacione


s en la llamada al procedimiento; Sin embargo, la no

https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 97/211
11/3/2021 PL / SQL - Guía rápida

tacion posicional p deberia reducir la notacion con n


ombre.

La siguiente llamada es legal -

ndMin (a, b, c, m => d);

Sin embargo, esto no es legal:

ndMin (x => a, b, c, d);

PL / SQL - Funciones

En este capitulo, tenemos las funciones en PL / SQL.


Una funcion es lo mismo que un procedimiento, exc
epto que devuelve un valor. Por lo tanto, cualquier a
nalisis del capitulo anterior tambien es valido para l
as funciones.

Creando una funcion


Una funcion independientest creado usando la instr
uccion CREATE FUNCTION . La sintaxis simpli cada
para la instruccion CREATE OR REPLACE PROCEDU
RE es la siguiente:

CREATE [OR REPLACE] FUNCTION nombre_funcion


[(nombre_parametro [IN | OUT | IN OUT] tipo [, ...])] R

https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 98/211
11/3/2021 PL / SQL - Guía rápida

ETURN return_datatype {IS | AS} BEGIN END [functi


on_name];

Donde,

nombre-funcion especi ca el nombre de la funcion.

La opcion [OR REPLACE] permite la modi cacion de


una funcion existente.

La lista de parametros opcionales contiene el nombr


e, modo y tipos de los parametros. IN representa el
valor que se pasara desde fuera y OUT representa e
l parametro que se utilizara para devolver un valor f
uera del procedimiento.

La funcion debe contener un retorno .

https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 99/211
11/3/2021 PL / SQL - Guía rápida

La clausula RETURN especi ca el tipo de data que v


a a devolver de la funcion.

cuerpo de la funcion contiene la parte ejecutable.

La palabra clave AS se utiliza en lugar de la palabra


clave IS para crear una funcion independiente.

Ejemplo

El siguiente ejemplo ilustra como crear y llamar a un


a funcion independiente. Esta funcion devuelve el n
umero total de CLIENTES en la tabla de clientes.

Usaremos la tabla CUSTOMERS, que creamos en el


capitulo Variables PL / SQL -

Seleccione * f Clientes romanies; + ---- + ---------- + --


--- + ----------- + ---------- + | ID | NOMBRE | EDAD | DI
RECCION | SALARIO | + ---- + ---------- + ----- + ---------
https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 100/211
11/3/2021 PL / SQL - Guía rápida

-- + ---------- + | 1 | Ramesh | 32 | Ahmedabad | 2000,


00 | | 2 | Khilan | 25 | Delhi | 1500,00 | | 3 | kaushik |
23 | Kota | 2000,00 | | 4 | Chaitali | 25 | Mumbai | 6.5
00,00 | | 5 | Hardik | 27 | Bhopal | 8.500,00 | | 6 | Ko
mal | 22 | MP | 4.500,00 | + ---- + ---------- + ----- + ----
------- + ---------- +

CREAR O REEMPLAZAR FUNCIÓN totalCustomers R


ETURN numero ES numero total (2): = 0; BEGIN SEL
ECT cuenta (*) en total DE clientes; Regreso trotal; FI
N; /

Cuando el codigo anterior se ejecuta usando el indic


ador SQL, producira el siguiente resultado:

Funcion creada.

Llamar a una funcion


Al crear una funcion, das una de nicion de lo que de
beria hacer la funcion. Para utilizar una funcion, deb
era llamar a esa funcion para realizar la tarea de ni
da. Cuando un programa llama a una funcion, el con
trol del programa se trans ere a la funcion llamada.

Una funcion llamada ejecuta la tarea de nida y cua


ndo se ejecuta su instruccion de retorno o cuando se

https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 101/211
11/3/2021 PL / SQL - Guía rápida

alcanza la ultima instruccion de n , devuelve el con


trol del programa al programa principal.

Para llamar a una funcion, solo necesita pasar los pa


rametros requeridos conel nombre de la funcion y si
la funcion devuelve un valor, puede almacenar el val
or devuelto. El siguiente programa llama a la funcio
n totalCustomers desde un bloque anonimo -

DECLARE c number (2); COMIENZO c: = totalCustom


ers dbms_output.put_line ( 'Numero total de clientes:
' || c); FIN; /

Cuando el codigo anterior se ejecuta en el indicador


SQL, produce el siguiente resultado:

Total no. numero de clientes: 6 Procedimiento PL / S


QL completado con exito.

Ejemplo

El siguiente ejemplo ilustra la declaracion, de nicion


y llamada de una funcion PL / SQL simple que calcul
a y devuelve el maximo de dos valores.

DECLARAR un numero; numero b; numero c; FUNCIÓ


N ndMax (numero x IN, numero y IN) RETURN num
ero IS numero z; COMIENCE SI x> y ENTONCES z: =

https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 102/211
11/3/2021 PL / SQL - Guía rápida

x; ELSE Z: = y; TERMINARA SI; RETORNO z; FIN; CO


MIENZO en: = 23; b: = 45; c: = ndMax (a,segundo); d
bms_output.put_line ( 'Maximo de (23,45): ' || c); FIN;
/

Cuando el codigo anterior se ejecuta en el indicador


de SQL, produce el siguiente resultado:

Maximo de (23.45 ): 45 procedimiento PL / SQL com


pletado con exito.

Funciones recursivas PL / SQL


Hemos visto que un programa o una subrutina pued
e llamar a otra subrutina. Cuando una subrutina se ll
ama a si misma, se llama llamada recursiva y el proc
eso se llama recursividad .

Para ilustrar el concepto, calculemos el factorial d 'u


n numero. El factorial de un numero n se de ne com
o-

n! = n * (n-1)! = n * (n-1) * (n-2)! ... = n * (n-1) * (n-2) * (n


-3) ... 1

El siguiente programa calcula el factorial de un num


ero dado en s ' llamando de forma recursiva -

https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 103/211
11/3/2021 PL / SQL - Guía rápida

DECLARE num number; numero factorial; FUNCIÓN


hecho (x numero) RETORNO numero IS f numero; C
OMENZARSI x = 0 ENTONCES f: = 1; ELSE f: = x * hec
ho (x-1); TERMINARA SI; RETORNO f; FIN; BEGIN nu
m: = 6; factorial: = hecho (num); dbms_output.put_lin
e ( 'Factorial ' || num || 'es ' || factorial); FIN; /

Cuando el codigo anterior se ejecuta en el indicador


de SQL, produce el siguiente resultado:

Factorial 6 es el procedimiento 720 PL / SQL se com


pleto correctamente.

PL / SQL - Cursores

En este capitulo, tenemos cursores en PL / SQL. Ora


cle crea un area de memoria, denominada area de c
ontexto, para procesar una declaracion SQL, que con
tiene toda la informacion necesaria para procesar la
declaracion; por ejemplo, el numero de las procesa
das, etc.

Un cursor es un puntero a esta area de contexto. PL


/ SQL controla el area de contexto mediante un curs
or. Un cursor contiene las las (una o mas) devuelta
s por una instruccion SQL. El conjunto de las que c
ontiene el cursor se llama conjunto activo.

https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 104/211
11/3/2021 PL / SQL - Guía rápida

Puede nombrar un cursor para que pueda ser refere


nciado en un programa para recuperar y procesar la
s las devueltas por la declaracion SQL, una a la vez.
Hay dos tipos de cursores:

1 Cursores implicitos

2 Cursores explicitos

Cursores implicitos
Oracle crea automaticamente cursores implicitos ca
da vez que se ejecuta una instruccion SQL, cuando n
o hay un cursor explicito para la instruccion. Los pro
gramadores no pueden controlar los cursores implici
tos y la informacion que contienen.

Siempre que se emite una instruccion DML (INSERT,


UPDATE y DELETE), se asocia un cursor implicito co
n esa instruccion. Para las operaciones INSERT, el cu
rsor contiene los data que se deben insertar. Para la
s operaciones UPDATE y DELETE, el cursor identi ca
las las que se verian afectadas.

En PL / SQL puede hacer referencia al cursor impma


s reciente legal como cursor SQL , que todavia tiene
atributos como % FOUND,% ISOPEN,% NOTFOUND
https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 105/211
11/3/2021 PL / SQL - Guía rápida

y % ROWCOUNT . El cursor SQL tiene atributos adici


onales, % BULK_ROWCOUNT y % BULK_EXCEPTION
S , disenados para usarse con la instruccion FORALL
. La siguiente tabla proporciona la de nicion de los a
tributos mas utilizados:

S.

N Atributo & Deion

% ENCONTRADO

Devuelve VERDADERO si una instruccion INSERT,


1 UPDATE o DELETE afecto a uno o varias las o un

SELECT La instruccion INTO devolvio una o mas


las. De lo contrario, devuelve FALSE.

% NOTFOUND

El opuesto logico de% F OUND. Devuelve VERDAD


2 ERO si una instruccionINSERT, UPDATE o DELETE
no afectaron a ninguna la o si una instruccion S
ELECT INTO no devolvio ninguna la. De lo contra
rio, devuelve FALSE.

3
% ISOPEN

https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 106/211
11/3/2021 PL / SQL - Guía rápida

Siempre devuelve FALSE para cursores implicitos,


porque Oracle cierra automaticamente el cursor S
QL despues de ejecutar la instruccion SQL asocia
da.

% ROWCOUNT

4 Devuelve el numero de las afectadas por una ins


truccion INSERT, UPDATE o DELETE, o devuelto p
or una instruccion SELECT INTO.

Cualquier atributo de cursor SQL sera accesible com


o sql% attribute_name como se muestra a continua
cion en el ejemplo.

Ejemplo

Usaremos la tabla CUSTOMERS que creamos y usa


mos en los capitulos anteriores.

Seleccionar * entre clientes; + ----+ ---------- + ----- + -


---------- + ---------- + | ID | NOMBRE | EDAD | DIRECCI
ON | SALARIO | + ---- + ---------- + ----- + ----------- + ---
------- + | 1 | Ramesh | 32 | Ahmedabad | 2000,00 | |
2 | Khilan | 25 | Delhi | 1500,00 | | 3 | kaushik | 23 | K
ota | 2000,00 | | 4 | Chaitali | 25 | Mumbai | 6.500,0
0 | | 5 | Hardik | 27 | Bhopal | 8.500,00 | | 6 | Komal |
https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 107/211
11/3/2021 PL / SQL - Guía rápida

22 | MP | 4.500,00 | + ---- + ---------- + ----- + ----------


- + ---------- +

El siguiente programa actualizara la tabla y aument


ara el salario de cada cliente en 500 y usara el atrib
uto SQL% ROWCOUNT para determinar el numero d
e las afectadas -

DECLARAR el numero total_rows (2); COMENZAR AC


TUALIZAR clientes SET salario = salario + 500; SI sq
l% notfound THEN dbms_output.put_line ( 'ningun cli
ente seleccionado '); ELSIF sql% encontrado ENTON
CES total_rows: = sql% rowcount; dbms_output.put_li
ne (total_rows || 'clientes seleccionados '); TERMINA
RA SI; FIN; /

Cuando el codigo anteriorssus se ejecuta en el indic


ador de SQL, produce el siguiente resultado:

6 clientes seleccionados El procedimiento PL / SQL s


e completo correctamente.

Si comprueba los registros en la tabla de clientes, en


contrara que las las se han actualizado -

Seleccione * entre los clientes; + ---- + ---------- + -----


+ ----------- + ---------- + | ID | NOMBRE | EDAD | DIREC
CION | SALARIO | + ---- + ---------- + ----- + ----------- +
---------- + | 1 | Ramesh | 32 | Ahmedabad | 2,500,00 |

https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 108/211
11/3/2021 PL / SQL - Guía rápida

| 2 | Khilan | 25 | Delhi | 2000,00 | | 3 | kaushik | 23 |


Kota | 2,500,00 | | 4 | Chaitali | 25 | Mumbai | 7000,
00 | | 5 | Hardik | 27 | Bhopal | 9000,00 | | 6 | Komal
| 22 | MP | 5,000,00 | + ---- + ---------- + ----- + ---------
-- + ---------- +

Cursores explicitos
Los cursores explicitos son cursores de nidos por el
programador para obtener mas control sobre el area
de contexto . Un cursor explicitodebe de nirse en la
seccion de declaracion del bloque PL / SQL. Se crea
en una instruccion SELECT que devuelve mas de un
a la.

La sintaxis para crear un cursor explicito es -

CURSOR cursor_name IS selected_statement;

Trabajar con un cursor explicito incluye los siguiente


s pasos:

1 Declaracion del cursor para la ini


cializacion de la memoria

2 Abra el cursor de asignacion de


memoria
https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 109/211
11/3/2021 PL / SQL - Guía rápida

3 Recupere el cursor para recuper


ar data

4 Cierre el cursor para liberar la me


moria asignada

Declaracion del cursor


La declaracion del cursor de ne el cursor con un no
mbre y la declaracion SELECT asociada. Por ejemplo
-

CURSOR c_customers ES SELECT id, name, address


FROM customers;

Abrir el cursor
Abrir el cursor asigna memoria para el cursor y lo pr
epara para el.recuperar las las devueltas por la sen
tencia SQL. Por ejemplo, abriremos el cursor de nid
o anteriormente de la siguiente manera:

OPE N c_customers;

Recuperacion del cursor


https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 110/211
11/3/2021 PL / SQL - Guía rápida

La recuperacion del cursor implica acceder a una lin


ea a la vez. Por ejemplo, recuperaremos las lineas d
el cursor abierto arriba de la siguiente manera:

FETCH c_customers INTO c_id, c_name, c_addr;

Cerrar cursor
Cerrar cursor signi ca liberar memoria asignada. Po
r ejemplo, cerraremos el cursor abierto arriba de la si
guiente manera:

CLOSE c_customers;

Ejemplo

Aqui hay un ejemplo completo para ilustrar los conc


eptos de cursores explicitos & minua;

DECLARAR c_id customers.id% type; c_name custom


er.name% type; c_addr customers.address% type; C
URSOR c_customers es SELECT id, name, address F
ROM customers; BEGIN OPEN c_customers; LOOP F
ETCH c_customers in c_id, c_name, c_addr; SALIR CU
ANDO c_customers% notfound; dbms_output.put_lin
e (c_id || '' || c_name || '' || c_addr); END LOOP; CERRA
R c_customers; FIN; /

https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 111/211
11/3/2021 PL / SQL - Guía rápida

Cuando el codigo anterior se ejecuta en el indicador


SQL, produce el siguiente resultado:

1 Ramesh Ahmedabad 2 Khilan Delhi 3 kaushik Kota


4 Chaitali Mumbai 5 Hardik Bhopal 6 PL / SQL Proce
dimiento de Komal MP completado con exito.

PL / SQL - Registros

En este capitulo tenemos registros en PL / SQL. Un r


egistro es una estructura de data que puede conten
er elementos de data de diferentes tipos. Los registr
os constan de diferentes campos, similares a una l
a en una tabla de base de data.

Por ejemplo, desea realizar un seguimiento de sus li


bros en una biblioteca. Es posible que desee realizar
un seguimiento de los siguientes atributos para cad
a libro, como el titulo, autor, tema, ID del libro. Un re
gistro que contiene un campo para cada uno de esto
s elementos permite que un LIBRO sea tratado com
o una unidad logica y le permite organizar y represe
ntar mejor su informacion.

PL / SQL puede manejar los siguientes tipos de regi


stros:

https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 112/211
11/3/2021 PL / SQL - Guía rápida

1 Basado en tablas

2 Basado en registros en un cursor

3 Registros nos del usuario

Registros basados en tablas


El atributo% ROWTYPE permite a un programador cr
ear registros basados en tablas y cursores registro
s.

El siguiente ejemplo demuestra el concepto de regis


tros basados en tablas . Usaremos la tabla CUSTOM
ERS que creamos y usamos en los capitulos anterior
es -

DECLARE customer_rec customers% rowtype; COMI


ENCE A SELECCIONAR * en customer_rec DE clientes
DONDE id = 5; dbms_output.put_line ( 'ID de cliente: '|
| customer_rec.id); dbms_output.put_line ( 'Nombre d
el cliente: ' || customer_rec.name); dbms_output.put_li
ne ( 'Direccion del cliente: ' || customer_rec.address);
dbms_output.put_line ( 'Salario del cliente: ' || custom
er_rec.salary); FIN; /

https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 113/211
11/3/2021 PL / SQL - Guía rápida

Cuando el codigo anterior se ejecuta en el indicador


SQL, produce el siguiente resultado:

Numero de cliente: 5 cliente: Hardik direccion del clie


nte: Bhopal salario del cliente: 9000 PL / SQL proce
dimiento completado con exito.

Registros basados en cursor


El siguiente ejemplo ilustra el concepto de registros
basados en cursor . Usaremos la tabla CUSTOMERS
que creamos y usamos en los capitulos anteriores -

DECLARE CURSOR customer_cur is SELECT id, nam


e, address FROM customers; customer_rec customer
_cur% rowtype; BEGIN OPEN customer_cur; LOOP FE
TCH customer_cur en customer_rec; SALIR CUANDO
customer_cur% notfound; DBMS_OUTPUT.put_line (c
ustomer_rec.id || '' || customer_rec.name); END LOOP;
FIN; /

Cuando el codigo anterior se ejecuta en el indicador


SQL, produce el siguiente resultado:

1 Ramesh 2 Khilan 3 kaushik 4 Chaitali 5 Hardik 6 Pr


ocedimiento Komal PL / SQL completado con exito.

https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 114/211
11/3/2021 PL / SQL - Guía rápida

Registros de nidos por el usuar


io
PL / SQL proporciona un tipo de registro de nido po
r el usuario que le permite de nir diferentes estruct
uras de registro. Estos registros constan de diferent
es campos. Suponga que desea realizar un seguimi
ento de sus libros en una biblioteca. Es posible que
desee realizar un seguimiento de los siguientes atri
butos para cada libro:

1 Titulo

2 Autor

3 Asunto

4 ID de libro

De nicion de registro

El tipo de registro se de ne como -

TYPE type_name IS RECORD (campo_name1 datatyp


e1 [NOT NULL] [: = DEFAULT EXPRESSION], eld_na

https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 115/211
11/3/2021 PL / SQL - Guía rápida

me2 datatype2 [NOT NULL] [: = DEFAULT EXPRESSI


ON], ... eld_nameN datatypeN [NOT NULL] [: = DEFA
ULT EXPRESSION); nombre del registro type_name;

El registro del libro se declara de la siguiente maner


a:

DECLARE TYPE books IS RECORD (titulo varchar (5


0), autor varchar ( 50), sujeto varchar (100), numero
de book_id); libros book1; libros book2;

Acceso al campo

Para acceder a cualquier campo en un registro, usa


mos el operador de punto (.) . El operador de acceso
a miembros esta codi cado como un periodo entre e
l nombre de la variable de registro y el campo al que
queremos acceder. Aqui hay un ejemplo para explic
ar el uso de record -

DECLARE type books is record (title varchar (50), aut


hor varchar (50), subject varchar (100) , numero de b
ook_id); libros book1; libros book2; EMPEZAR- Libro
de especi caciones del libro 1 1. titulo: = 'Programaci
on en C '; libro1.autor: = 'Nuha Ali '; book1.subject: = 'T
utorial de programacion en C '; book1.book_id: = 649
5407; - Libro 2 especi caciones book2.title: = 'Teleco
m Billing '; libro2.autor: = 'Zara Ali '; book2.subject: =
https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 116/211
11/3/2021 PL / SQL - Guía rápida

'Tutorial de facturacion de telecomunicaciones '; boo


k2.book_id: = 6495700; - Imprime la grabacion del li
bro 1 dbms_output.put_line ( 'Titulo del libro 1: ' || libro
1.title); dbms_output.put_line ( 'Autor del libro 1: ' || lib
ro1.autor); dbms_output.put_line ( 'Asunto del libro 1: '
|| libro1.subject); dbms_output.put_line ( 'Libro 1 book
_id: ' || book1.book_id); - Imprimir registro del libro 2 d
bms_output.put_line ( 'Titulo del libro 2: ' || libro2.titl
e); dbms_output.put_line ( 'Autor del libro 2: ' || libro2.
autor); dbms_output.put_line ( 'Asunto del libro 2: ' || l
ibro2.subject); db ms_output.put_line ( 'Book 2 book_
id: ' || book2.book_id); FIN; /

Cuando el codigo anterior esst ejecutado en el indic


ador de SQL, produce el siguiente resultado:

Titulo del libro 1: Autor del libro de programacion C 1:


Nuha Ali Libro 1 tema: C Tutorial de programacion Li
bro 1 book_id: 6495407 Titulo del libro 2: Telecom Bi
lling Book 2 autor: Zara Ali Libro 2 asunto: Telecom
Billing Tutorial Libro 2 book_id: 6495700 Procedimi
ento PL / SQL completado con exito.

Registros como parametros de


subrutina

https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 117/211
11/3/2021 PL / SQL - Guía rápida

Puede pasar un registro como parametro de subruti


na como pasa cualquier otra variable. Tambien pued
e acceder a los campos de registro de la misma man
era que accedio en el ejemplo anterior -

DECLARAR tipo libros es registro (titulo varchar (50),


autor varchar (50), sujeto varchar (100), numero de
book_id); libros book1; libros book2; PROCEDIMIENT
O printbook (libros de libros) IS START dbms_output.
put_line ( 'Titulo del libro: ' || libro.titlmi); dbms_outpu
t.put_line ( 'Autor del libro: ' || libro.autor); dbms_outp
ut.put_line ( 'Asunto del libro: ' || libro.subject); dbms_
output.put_line ( 'Libro book_id: ' || book.book_id); FI
N; BEGIN - Libro 1 Libro de especi caciones 1.title: =
'Programacion en C '; libro1.autor: = 'Nuha Ali '; book1.
subject: = 'Tutorial de programacion en C '; book1.bo
ok_id: = 6495407; - Libro 2 especi caciones book2.ti
tle: = 'Telecom Billing '; libro2.autor: = 'Zara Ali '; book
2.subject: = 'Tutorial de facturacion de telecomunica
ciones '; book2.book_id: = 6495700; - Utilice el proce
dimiento para imprimir informacion sobre el libro de
impresion del libro (libro1); printbook (libro2); FIN; /

Cuando el codigo anterior se ejecuta en el indicador


SQL, produce el siguiente resultado:

Titulo del libro: C Autor Libro de programacion: Nuha


Ali Tema del libro: Tutorial de programacion en C Bo
https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 118/211
11/3/2021 PL / SQL - Guía rápida

ok_id: 6495407 Titulo del libro: Libro de facturacion


de telecomunicaciones Autor: Zara Ali Tema del libr
o: Tutorial de facturacion de telecomunicaciones bo
ok_id: 6495700 Procedimiento PL / SQL completado
con exito.

PL / SQL - Excepciones

En este capitulo tenemos excepciones en PL / SQL.


Una excepcion es una condicion de error al ejecutar
un programa. PL / SQL ayuda a los programadores a
detectar estas condiciones mediante el uso del bloq
ue EXCEPCIÓN en el programa y se toman las medi
das adecuadas contra la condicion de error. Hay dos
tipos de excepciones:

1 Excepciones de nidas por el sist


ema

2 Excepciones de nidas por el usu


ario

Sintaxis para manejar excepcio


nes
https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 119/211
11/3/2021 PL / SQL - Guía rápida

La sintaxis general para manejar excepciones es la s


iguiente. Aqui puede enumerar todas las excepcione
s que pueda manejar. La excepcion predeterminada
se manejara usando CUANDO otros ENTONCES -

DECLARE BEGIN < comando (s) ejecutable> EXCEPCI


ÓN CUANDO excepcion1 ENTONCES sentencias-man
ejo-excepcion1 CUANDO excepcion2 ENTONCES sen
tencias-manejo-excepcion2 CUANDO excepcion3 EN
TONCES sentencias-manejo-excepcion3 ........ CUAND
O otros ENTONCES sentencias-manejo-excepcion3
END;

Ejemplo

Escribamos un codigo para ilustrar el concepto. Usar


emos la tabla CUSTOMERS que creamos y usamos
en los capitulos anteriores -

DECLARE c_id customers.id% type: = 8; c_name cust


omerS.Name% type; c_addr customers.address% ty
pe; COMIENCE SELECCIONAR nombre, direccion EN
c_name, c_addr DE clientes DONDE id = c_id; DBMS_O
UTPUT.PUT_LINE ( 'Nombre: ' || c_name); DBMS_OUT
PUT.PUT_LINE ( 'Direccion: ' || c_addr); EXCEPCIÓN C
UANDO no_data_found THEN dbms_output.put_line (

https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 120/211
11/3/2021 PL / SQL - Guía rápida

'¡No existe tal cliente! '); CUANDO otros ENTONCES d


bms_output.put_line ( 'Error! '); FIN; /

Cuando el codigo anterior se ejecuta en el indicador


SQL, produce el siguiente resultado:

¡Ningun cliente de este tipo! Procedimiento PL / SQL


completado con exito.

El programa anterior muestra el nombre y la direcci


on de un cliente cuyo nombre de usuario se proporci
ona Dado que no hay ningun cliente con el ID de val
or 8 en nuestra base de data, el programa genera la
excepcion de tiempo de ejecucion NO_DATA_FOUND
, que se captura en la Bloque EXCEPTION .

Lanzamiento de excepciones
El servidor de la base de data lanza las excepciones
automaticamente cada vez que hay un error. base d
e data interna, pero el programador puede lanzar ex
cepciones explicitamente usando el comando RAISE
. Aqui esta la sintaxis simple para lanzar una excepci
on:

DECLARAR nombre_excepcion EXCEPCIÓN; COMIEN


ZAR SI condicion ENTONCES RAISE nombre_excepci

https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 121/211
11/3/2021 PL / SQL - Guía rápida

on; FIN SI; EXCEPCIÓN CUANDO declaracion nombre


_excepcion THEN; FIN;

Puede utilizar la sintaxis anterior para lanzar la exce


pcion estandar de Oracle ocualquier excepcion de n
ida por el usuario. En la siguiente seccion le daremo
s un ejemplo de como lanzar una excepcion de nida
por el usuario. Puede lanzar excepciones estandar d
e Oracle de la misma manera.

Excepciones de nidas por el us


uario
PL / SQL le permite de nir sus propias excepciones
de acuerdo con las necesidades de su programa. Un
a excepcion de nida por el usuario debe declararse
y luego generarse explicitamente, utilizando una de
claracion RAISE o el procedimiento DBMS_STANDA
RD.RAISE_APPLICATION_ERROR .

La sintaxis para declarar una excepcion es -

DECLARAR mi-excepcion EXCEPCIÓN;

Ejemplo

https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 122/211
11/3/2021 PL / SQL - Guía rápida

El siguiente ejemplo ilustra el concepto. Este progra


ma solicita una identi cacion de cliente, cuando el u
suario ingresa una identi cacion no valida, se gener
a la excepcion invalid_id .

DECLARAR c_id customers.id% type: = & cc_id; c_nam


e customerS.Name% type; c_addr customers.addres
s% type; - excepcion de nida por el usuario ex_invali
d_id EXCEPTION; INICIAR SI c_id <= 0 LUEGO AUME
NTAR ex_invalid_id; ELSE SELECT nombre, direccion
EN c_name, c_addr FROM clientes DONDE id = c_id; D
BMS_OUTPUT.PUT_LINE ( 'Nombre: ' || c_name); DBM
S_OUTPUT.PUT_LINE ( 'Direccion: ' || c_addr); TERMIN
ARA SI; EXCEPCIÓN CUANDO ex_invalid_id ENTONC
ES dbms_output.put_line ( '¡El ID debe ser mayor que
cero! '); CUANDO no_data_found THEN dbms_output.
put_line ( '¡No existe tal cliente! '); CUANDO otros EN
TONCES dbms_output.put_line ( 'Error! '); FIN; /

Cuando el codigo anterior se ejecuta en el indicador


SQL, produce el siguiente resultado:

Ingrese el valor para cc_id: -6 (ingrese un valor -6) a


ntiguo 2: c_id clientes.id% tipo: = & cc_id; nuevo 2: c_i
d customers.id% type: = -6; ¡La identi cacion debe s
er mayor que cero! El procedimiento PL / SQL se co
mpleto con exito.

https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 123/211
11/3/2021 PL / SQL - Guía rápida

Excepciones prede nidas


PL / SQL proporciona nexcepciones sombreadas pre
de nidas, que se ejecutan cuando un programa viol
a una regla de la base de data. Por ejemplo, la excep
cion NO_DATA_FOUND prede nida se genera cuand
o una instruccion SELECT INTO no devuelve ninguna
la. La siguiente tabla enumera algunas de las exce
pciones prede nidas importantes:

Er S

ro Q

Exc r L

epc de C Deion

ion Or O

ac D

le E

AC 0 - Se activa cuando un objeto nulo recibe au

CE 6 6 tomaticamente un valor.

SS_ 5 5

INT 3 3

O_ 0 0

https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 124/211
11/3/2021 PL / SQL - Guía rápida

NU

LL

CA
0 -
SE_ Se activa cuando no se selecciona ningun
6 6
NO a de las opciones en la clausula WHEN de
5 5
T_F una instruccion CASE, y hay no tiene clau
9 9
OU sula ELSE.
2 2
ND

CO
Se activa cuando un programa intenta apl
LLE -
0 icar metodos de recopilacion distintos de
CTI 6
6 EXI STS a una tabla anidada o varray no i
ON 5
5 nicializada, o al El programa intenta asign
_IS_ 3
31 ar valores a los elementos de una tabla a
NU 1
nidada o varray no inicializada.
LL

DU 0 - Se activa cuando se intenta almacenar va

P_V 0 1 lores duplicados en una columna con un i

AL_ 0 ndice unico.

ON 01

_IN

https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 125/211
11/3/2021 PL / SQL - Guía rápida

DE

INV
-
ALI
01 1 Se activa cuando se intenta realizar una o
D_C
0 0 peracion no autorizada del cursor, como c
UR
01 0 errar un cursor sin abrir.
SO
1
R

INV
-
ALI 01
1 Se activa cuando falla la conversion de un
D_ 7
7 a cadena en un numero porque la cadena
NU 2
2 no representa un numero valido.
MB 2
2
ER

LO -

GIN 01 1 Se activa cuando un programa intenta co

_DE 01 0 nectarse a la base de data con un nombre

NIE 7 1 de usuario o contrasena no validos.

D 7

NO 01 + Se genera cuando una instruccion SELEC

https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 126/211
11/3/2021 PL / SQL - Guía rápida

_DA 4 1 T INTO no devuelve ninguna la.

TA_ 0 0

FO 3 0

UN

NO
-
T_L
01 1 Esto se genera cuando se realiza una lla
OG
01 0 mada a la base de data sin estar conectad
GE
2 1 o a la base de data.
D_
2
ON

PR

OG -
0
RA 6
6 Se activa cuando PL / SQL tiene un proble
M_ 5
5 ma interno.
ER 0
01
RO 1

RO 0 - Se activa cuando un cursor recupera un v

WT 6 6 alor en una variable de tipo de data incom

YP 5 5 patible.
https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 127/211
11/3/2021 PL / SQL - Guía rápida

E_ 0 0

MI 4 4

SM

AT

CH

-
SE 3
3
LF_ 0 Se activa cuando se activa un metodo mie
0
IS_ 6 mbro llamado, pero la instancia del tipo d
6
NU 2 e objeto no se ha inicializado.
2
LL 5
5

ST
0 -
OR
6 6
AG Se activa cuando PL / SQL se queda sin m
5 5
E_E emoria o la memoria esta danada.
0 0
RR
0 0
OR

TO 01 - Se activa cuando una instruccion SELECT

O_ 4 1 INTO devuelve mas de una la.

MA 2 4

NY_ 2
https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 128/211
11/3/2021 PL / SQL - Guía rápida

RO 2

WS 2

VA 0 -

LU 6 6 Se activa cuando ocurre un error aritmetic

E_E 5 5 o, de conversion, de truncamiento o de re

RR 0 0 striccion de tamano.

OR 2 2

ZE
01 1
RO
4 4
_DI Se activa cuando unSe intenta
7 7
VID
6 6
E

PL / SQL - Triggers

En este capitulo, tenemos triggers en PL / SQL. Los a


ctivadores son programas almacenados, que se ejec
utan o activan automaticamente cuando ocurren cie
rtos eventos. De hecho, los disparadores estan escrit
os para ejecutarse en respuesta a uno de los siguien
tes eventos:

1
https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 129/211
11/3/2021 PL / SQL - Guía rápida

Una instruccion de manipulacion basica base de dat


a (DML) (ELIMINAR, INSERTAR o ACTUALIZAR)

Una de nicion de base de data (DDL) (CREAR , ALT


ER o DROP).

Una operacion de la base de data (SERVERERROR,


LOGON, LOGOFF, STARTUP o SHUTDOWN).

Los disparadores pueden de nirse en la tabla, vista,


esquema o base de data con la que esta asociado el
evento.

Ventajas de los disparadores

Los disparadores se pueden escribir para los siguien


tes propositoss -

1 Generacion automatica de algun


os valores de columna derivados

https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 130/211
11/3/2021 PL / SQL - Guía rápida

2 Aplicando integridad referencial

3 Registro de eventos y almacena


miento de informacion de acceso a la t
abla

4 Auditoria

5 Replicacion de tabla sincrona

6 Imposicion de permisos de segur


idad

7 Prevencion de transacciones inv


alidas

Creacion de disparadores
La sintaxis para crear un disparador es -

CREAR [O REEMPLAZAR] TRIGGER trigger_name {A


NTES | DESPUÉS | EN LUGAR DE} {INSERT [OR] | AC
TUALIZAR [O] | DELETE} [OF col_name] ON table_na

https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 131/211
11/3/2021 PL / SQL - Guía rápida

me [REFERENCIA ANTIGUO COMO o NUEVO COMO


n] [PARA CADA FILA] CUANDO (condicion) DECLARE
Declaraciones-declaraciones BEGIN Ejecutables-dec
laraciones EXCEPCIÓN Excepcion-manejo-declaraci
ones END;

Donde,

CREAR [O REEMPLAZAR] TRIGGER trigger_name - C


rea o reemplaza un disparador existente con trigger
_name .

{ANTES | DESPUÉS | INSTEAD OF}: especi ca cuand


o se ejecutara el disparador. La clausula INSTEAD O
F se utiliza para crear un disparador en una vista.

{INSERT [OR] | ACTUALIZAR [O] | DELETE}: esto esp


eci ca la operacion DML.

https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 132/211
11/3/2021 PL / SQL - Guía rápida

[OF col_name]: especi ca el nombre de la columna q


ue se actualizara.

[ON table_name]: especi ca el nombre de la tabla as


ociada con el activador.

[REFERENCIA ANTIGUO COMO o NUEVO COMO n] -


Esto le permite hacer referencia a valores nuevos y
antiguos para

[PARA CADA FILA]: esto especi ca un disparador a


nivel de la, es decir, el disparador se ejecutara para
cada la afectada. De lo contrario, el disparador solo
se ejecutara una vez cuando se ejecute la instruccio
n SQL, lo que se denomina disparador a nivel de tabl
a.

https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 133/211
11/3/2021 PL / SQL - Guía rápida

CUANDO (condition): esto proporciona una condicio


n para las lineas para las que se dispararia el gatillo.
Esta clausula solo es valida para activadores de nive
l de la.

Ejemplo

Para empezar, usaremos la tabla CLIENTES que crea


mos y usamos en capitulos anteriores -

Seleccionar * entre los clientes; + ---- + ---------- + ----


- + ----------- + ---------- + | ID | NOMBRE | EDAD | DIRE
CCION | SALARIO | + ---- + ---------- + ----- + -----------
+ ---------- + | 1 | Ramesh | 32 | Ahmedabad | 2000,0
0 | | 2 | Khilan | 25 | Delhi | 1500,00 | | 3 | kaushik | 2
3 | Kota | 2000,00 | | 4 | Chaitali | 25 | Mumbai | 6.50
0,00 | | 5 | Hardik | 27 | Bhopal | 8.500,00 | | 6 | Kom
al | 22 | MP | 4.500,00 | + ---- + ---------- + ----- + ------
----- + ---------- +

El siguiente programa crea un activador de nivel de


la para la tabla de clientes que se activaria para las
operaciones INSERT,ACTUALIZAR o ELIMINAR reali
zado en la tabla CLIENTES. Este activador mostrara l

https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 134/211
11/3/2021 PL / SQL - Guía rápida

a diferencia en el salario entre los valores antiguos


y los nuevos valores -

CREAR O REEMPLAZAR EL DISPARADOR display_s


alary_changes ANTES DE BORRAR O INSERTAR O A
CTUALIZAR CLIENTES PARA CADA UNO RANGO CU
ANDO (NUEVO. ID> 0) DECLARAR el numero sal_di ;
BEGIN sal_di : =: NEW.salary -: OLD.salary; dbms_ou
tput.put_line ( 'Salario anterior: ' ||: Salario VIEJO); db
ms_output.put_line ( 'Nuevo salario: ' ||: NUEVO.salari
o); dbms_output.put_line ( 'Diferencia de salario: ' || s
al_di ); FIN; /

Cuando el codigo anterior se ejecuta en el indicador


SQL, produce el siguiente resultado:

Trigger creado.

Aqui se deben considerar los siguientes puntos:

Las referencias ANTIGUAS y NUEVAS no estan disp


onibles para los activadores de nivel de la mesa, en
su lugar puedes usarloser para disparadores de nive
l de registro.

https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 135/211
11/3/2021 PL / SQL - Guía rápida

Si desea consultar la tabla en el mismo activador, de


be utilizar la palabra clave AFTER, ya que los activad
ores pueden consultar la tabla o modi carla nuevam
ente solo despues de se aplicaron los cambios inicial
es y la tabla volvio a un estado coherente.

El activador anterior se escribio de tal manera que s


e activara antes de cualquier operacion DELETE, INS
ERT o UPDATE en la tabla, pero puede escribir su act
ivador para una o mas operaciones, por ejemplo, AN
TES DE BORRAR, que se activara cada vez que se eli
mine un registro mediante la operacion BORRAR en
la tabla.

Activando un disparador
Hagamos algunas operaciones DML en la tabla CUS
TOMERS. Aqui hay una instruccion INSERT, que cre
ara un nuevo registro en la tabla:

INSERT INTO CUSTOMERS (ID, NOMBRE, EDAD, DIR


ECCIÓN, SALARIO) VALORES (7, 'Kriti ', 22, 'HP ', 750

https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 136/211
11/3/2021 PL / SQL - Guía rápida

0,00);

Cuando se crea un registro en la tabla CLIENTES, el


activador de creacion anterior, display_salary_chang
es se activara y mostrara el siguiente resultado:

Salario anterior: Salario nuevo: 7500 Diferencia sala


rial:

Como se trata de un nuevo registro, el salario anteri


or no esta disponible y el resultado anterior es cero.
Ahora ejecutemos otra operacion DML en la tabla C
USTOMERS. La instruccion UPDATE actualizara un r
egistro existente en la tabla -

ACTUALIZAR clientes SET salario = salario + 500 W


HERE id = 2;

Cuando se actualiza un registro en la tabla CLIENTE


S, el activador de creacion anterior, display_salary_c
hanges se activara y mostrara el siguiente resultad
o:

Salario anterior: 1500 Nuevoagua salario: 2000 Dife


rencia de salario: 500

PL / SQL - Paquetes

https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 137/211
11/3/2021 PL / SQL - Guía rápida

En este capitulo tenemos los paquetes en PL / SQL.


Los paquetes son objetos de esquema que agrupan
tipos, variables y subrutinas PL / SQL relacionados l
ogicamente.

Un paquete tendra dos partes obligatorias:

1 Especi cacion del paquete

2 Cuerpo o de nicion del paquete

Especi cacion del paquete


La especi cacion es la interfaz del paquete. Simple
mente DECLARA los tipos, variables, constantes, exc
epciones, cursores y subrutinas a las que se puede
hacer referencia desde fuera del paquete. En otras p
alabras, contiene toda la informacion sobre el conte
nido del paquete, pero excluye el codigo de las subr
utinas.

Todos los objetos colocados en la especi cacion se


denominan objetos publicos . Cualquier subrutina n
o listada en la especi cacion del paquete pero codi
cada en el cuerpo del paquete se llamaobjeto privad
o.

https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 138/211
11/3/2021 PL / SQL - Guía rápida

El siguiente fragmento de codigo muestra una espe


ci cacion de paquete con un solo procedimiento. Pu
ede de nir muchas variables globales y multiples pr
ocedimientos o funciones en un paquete.

CREAR PAQUETE cust_sal COMO PROCEDIMIENTO


nd_sal (c_id customers.id% type); END cust_sal; /

Cuando el codigo anterior se ejecuta en el indicador


SQL, produce el siguiente resultado:

Paquete creado.

Cuerpo del paquete


El cuerpo del paquete contiene los codigos de los di
versos metodos declarados en la especi cacion del
paquete y otras declaraciones privadas, que estan o
cultas en el codigo fuera del paquete.

La sentencia CREATE PACKAGE BODY se utiliza par


a crear el cuerpo del paquete. El siguiente fragment
o de codigo muestra la declaracion del cuerpo del pa
quete para el paquete cust_sal creado anteriorment
e. Supuse que ya habiamos creado elTabla CLIENTE
S en nuestra base de data como se menciona en el c
apitulo PL / SQL - Variables .

https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 139/211
11/3/2021 PL / SQL - Guía rápida

CREAR O REEMPLAZAR EL PAQUETE DEL CUERPO


cust_sal COMO PROCEDIMIENTO nd_sal (c_id custo
mers.id% TYPE) ES c_sal customers.salary% TYPE; C
OMIENCE A SELECCIONAR salario EN c_sal DE client
es DONDE id = c_id; dbms_output.put_line ( 'Salario: '
|| c_sal); END nd_sal; END cust_sal; /

Cuando el codigo anterior se ejecuta en el indicador


SQL, produce el siguiente resultado:

Cuerpo del paquete creado.

Usando los elementos del paqu


ete
Los elementos del paquete (variables, procedimient
os o funciones) son accesibles con la siguiente sinta
xis -

nombre_paquete.element_name;

Considere que ya hemos creado el paquete anterior


en nuestro esquema de base de data, el siguiente pr
ograma usa el metodo nd_sal del paquete cust_sal
-

DECLARE code customers.id% type: = & cc_id; EMPE


ZAR cust_sal. nd_sal (codigo); FIN; /

https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 140/211
11/3/2021 PL / SQL - Guía rápida

Cuando el codigo anterior se ejecuta en el indicador


SQL, le solicita que ingrese la ID del cliente y cuando
ingresa una ID, muestra el salario correspondiente d
e la siguiente manera:

Ingrese el valor de cc_id: 1 Salario: 3000 PL / Procedi


miento de SQL completado con exito.

Ejemplo

El siguiente programa proporciona un paquete mas


completo. Usaremos la tabla CUSTOMERS almacena
da en nuestra base de data con los siguientes regist
ros:

Seleccionar * entre clientes; + ---- + ---------- + ----- + -


---------- + ---------- + | ID | NOMBRE | EDAD | DIRECCI
ON | SALARIO | + ---- + ---------- + ----- + ----------- + ---
------- + | 1 | Ramesh | 32 | Ahmedabad | 3000,00 | |
2 | Khilan | 25 | Delhi | 3000,00 | | 3 | kaushik | 23 | K
ota | 3000,00 | | 4 | Chaitali | 25 | Mumbai | 7.500,00
| | 5| Hardik | 27 | Bhopal | 9.500,00 | | 6 | Komal | 22
| MP | 5500,00 | + ---- + ---------- + ----- + ----------- + -
--------- +

La especi cacion del paquete

https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 141/211
11/3/2021 PL / SQL - Guía rápida

CREAR O REEMPLAZAR EL PAQUETE c_package AS


- Agregar un cliente PROCEDIMIENTO addCustomer
(c_id customers.id% type, c_name customerS.No.am
e% type , c_age customers.age% type, c_addr custo
mers.address% type, c_sal customers.salary% type);
- Elimina un PROCEDIMIENTO delCustomer custome
r (c_id customers.id% TYPE); - Listar todos los cliente
s PROCEDIMIENTO listCustomer; END c_package; /

Cuando el codigo anterior se ejecuta en el indicador


SQL, crea el paquete anterior y muestra el siguiente
resultado:

Paquete creado.

Crear el cuerpo del paquete

CREAR O REEMPLAZAR EL CUERPO DEL PAQUETE


c_package COMO PROCEDIMIENTO addCustomer (c_
id customers.id% type, c_name customerS.No .ame%
type, c_age customers.age% type, c_addr customers.
address% type, c_sal customers.salary% type) ESTÁ
COMENZANDO INSERTADO EN CLIENTES (id, nombr
e, edad, direccion, salario) VALUES (c_id, c_name, c_a
ge, c_addr, c_sal); END addCustomer; EL PROCEDIMI
ENTO delCustomer (c_id customers.id% type) ES INI
CIAR ELIMINAR DE los clientes DONDE id = c_id; END

https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 142/211
11/3/2021 PL / SQL - Guía rápida

delCustomer; PROCEDIMIENTO listCustomer ES CUR


SOR c_customers es SELECT nombre DE clientes; TY
PE c_listcorresponde a TABLE OF customers.Name%
type; nombre_lista lista_c: = lista_c contador de enter
os: = 0; BEGIN FOR n IN c_customers Contador de LO
OP: = contador +1; name_list.extend; nombre_lista (co
ntador): = n. nombre; dbms_output.put_line ( 'Cliente
(' || contador || ') ' || lista_nombres (contador)); END L
OOP; END listCustomer; END c_package; /

El ejemplo anterior usa la tabla anidada . Discutirem


os el concepto de una tabla anidada en el proximo c
apitulo.

Cuando el codigo anterior se ejecuta en el indicador


SQL, produce el siguiente resultado:

Cuerpo del paquetecreado.

Usando el paquete

T El siguiente programa usa los metodos declarados


y de nidos en el paquete c_package .

DECLARE code customers.id% type: = 8; BEGIN c_pa


ckage.addcustomer (7, 'Rajnish ', 25, 'Chennai ', 350
0); c_package.addcustomer (8, 'Subham ', 32, 'Delhi ',

https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 143/211
11/3/2021 PL / SQL - Guía rápida

7500); c_package.listcustomer; c_package.delcustom


er (codigo); c_package.listcustomer; FIN; /

Cuando el codigo anterior se ejecuta en el indicador


SQL, produce el siguiente resultado:

Cliente (1): Ramesh Cliente (2): Cliente Khilan (3): Clie


nte kaushik (4): Cliente Chaitali (5): Cliente Hardik
(6): Cliente Komal (7): Cliente Rajnish (8): Cliente Sub
ham (1): Cliente Ramesh ( 2): Cliente Khilan (3): Client
e kaushik (4): Cliente Chaitali (5): Cliente Hardik (6):
Cliente Komal (7): Procedimiento Rajnish PL / SQL e
xitoso

PL / SQL - Colecciones

En este capitulo discutiremos la coleccionns en PL /


SQL. Una coleccion es un grupo ordenado de eleme
ntos con el mismo tipo de data. Cada elemento esta
identi cado por un indice unico que representa su p
osicion en la coleccion.

PL / SQL proporciona tres tipos de coleccion:

1 Index - por tablas o matriz asoci


ativa

https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 144/211
11/3/2021 PL / SQL - Guía rápida

2 Matriz anidada

3 Matriz de tamano variable o Varr


ay

La documentacion de Oracle proporciona las siguien


tes caracteristicas para cada tipo de coleccion:

< td style = "text-align :; vertical-align: middle; "> Ili

mitado

Ti
Num Puede ser
po
Tipo de ero d una aatri
de Denso o Lugar de cre
coleccio e ele buto del t
in escaso acion
n men ipo de obj
dic
tos eto
e

Matriz a
Cade Cu
sociativ Solo en e
na o alq
a (o tabl l bloque No
ente uie
a index PL / SQL
ro ra
ada)

Matriz a Sin li Int Comienz Bloque PL / Si


https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 145/211
11/3/2021 PL / SQL - Guía rápida

nidada mite eg a denso, SQL o nivel

s er puede vo de esquema

lverse es

caso

Matriz d Ya sea en el

e taman Deli En bloque PL /


Siempre
o variab mita ter SQL o en el Si
denso
le (Varr do o nivel de esq

ay) uema

Ya hemos discutido varray en el capitulo 'PL / SQL a


rrays ' . en este capitulo tenemos las tablas PL / SQ
L.

Ambos tipos de tablas PL / SQL, es decir, tablas inde


xadas y tablas anidadas, tienen la misma estructura
y sus las se accede mediante el indice Sin embarg
o, estos dos tipos de tablas di eren en un aspecto; l
as tablas anidadas se pueden almacenar en una col
umna de la base de data y las tablas indexadas no.

Tabla indexada
Una tabla indexada (etambien llamado matriz asoci
ativa ) es un conjunto de pares clave-valor . Cada cla
https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 146/211
11/3/2021 PL / SQL - Guía rápida

ve es unica y se utiliza para localizar el valor corresp


ondiente. La clave puede ser un numero entero o un
a cadena.

Se crea una tabla de indice utilizando la siguiente si


ntaxis. Aqui creamos una tabla indexada por llamad
a nombre_tabla , cuyas claves seran de tipo subtipo
y los valores asociados seran tipo_elemento

TYPE type_name ES TABLA DE element_type [NOT


NULL] INDEX BY sub_type; table_name type_name;

Ejemplo

El siguiente ejemplo muestra como crear una tabla p


ara almacenar valores enteros con nombres y luego
imprime la misma lista de nombres.

DECLARAR TIPO salario ES TABLA DE NÚMEROS ÍN


DICE POR VARCHAR2 (20); salario lista_salario; nom
bre VARCHAR2 (20); COMIENZO - agregue elemento
s a la tabla de la lista de pago ( 'Rajnish '): = 62000; l
ista_salarios ( 'Minakshi '): = 75000; lista_salarios (
'Martin '): = 100000; lista_salarios ( 'James '): = 7800
0; - impresion del nombre de la tabla: = Liste_salaire.
FIRST; MIENTRAS que el nombre NO ES nulo LOOP
dbms_output.put_line ( 'Salario de ' || nombre || 'es ' ||

https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 147/211
11/3/2021 PL / SQL - Guía rápida

TO_CHAR (lista_salarios (nombre))); nombre: = lista_s


alarios.NEXT (nombre); END LOOP; FIN; /

Cuando el codigo anterior se ejecuta en el indicador


SQL, produce el siguiente resultado:

El salario de James es 78,000 El salario de Martin e


s 100,000 El salario de Minakshi es 75,000 El salari
o de Rajnish es 62,000 PL / SQL.

Ejemplo

Los elementos de una tabla indexada tambien pued


en ser un % ROWTYPE de cualquier tabla de base d
e data o % TYPE de cualquier campo de la tabla de l
a base de data. El siguiente ejemplo ilustra el conce
pto. Usaremos la tabla CLIENTES almacenada en nu
estra base de data como -

Seleccionar * pclientes de armi; + ---- + ---------- + ----


- + ----------- + ---------- + | ID | NOMBRE | EDAD | DIRE
CCION | SALARIO | + ---- + ---------- + ----- + -----------
+ ---------- + | 1 | Ramesh | 32 | Ahmedabad | 2000,0
0 | | 2 | Khilan | 25 | Delhi | 1500,00 | | 3 | kaushik | 2
3 | Kota | 2000,00 | | 4 | Chaitali | 25 | Mumbai | 6.50
0,00 | | 5 | Hardik | 27 | Bhopal | 8.500,00 | | 6 | Kom
al | 22 | MP | 4.500,00 | + ---- + ---------- + ----- + ------
----- + ---------- +
https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 148/211
11/3/2021 PL / SQL - Guía rápida

DECLARE CURSOR c_customers es seleccionar el no


mbre de los clientes; TYPE c_listES TABLA de cliente
s. Nombre% tipo INDEX BY binary_integer; name_list
c_list; contador de enteros: = 0; BEGIN FOR n IN c_cu
stomers Contador de LOOP: = contador +1; nombre_li
sta (contador): = n. nombre; dbms_output.put_line ( 'C
liente (' || contador || '): ' || name_lis t (contador)); END
LOOP; FIN; /

Cuando el codigo anterior se ejecuta en el indicador


SQL, produce el siguiente resultado:

Cliente (1): Ramesh Cliente (2): Cliente Khilan (3): Clie


nte kaushik (4): Cliente Chaitali (5): Cliente Hardik
(6): Procedimiento Komal PL / SQL completado con e
xito

Tablas anidadas
Una tabla anidada es como una matriz unidimensio
nal con un numero arbitrario de elementos. Sin emb
argo, una tabla anidada di ere de una matriz en sig
uientes aspectos -

Una matriz tiene un numero declarado de elemento


s, pero no una tabla anidada. El tamano de una tabl
https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 149/211
11/3/2021 PL / SQL - Guía rápida

a anidada puede aumentar dinamicamente.

Una matriz siempre es densa, es decir, siempre tiene


subindices consecutivos. Una matriz anidada es den
sa inicialmente, pero puede volverse escasa cuando
se eliminan elementos de ella.

Se crea una matriz anidada usando la siguiente sint


axis:

TYPE type_name IS TABLE OF type_element [NOT N


ULL]; table_name type_name;

Esta declaracion es similarire a la declaracion de una


tabla indexada , pero no hay una clausula INDEX BY
.

Una tabla anidada se puede almacenar en una colu


mna de la base de data. Ademas, se puede utilizar p
ara simpli car las operaciones SQL en las que se un
e una tabla de una sola columna con una tabla mas
grande. Una matriz asociativa no se puede almacen
ar en la base de data.

Ejemplo
https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 150/211
11/3/2021 PL / SQL - Guía rápida

Los siguientes ejemplos ilustran el uso de una tabla


anidada -

DEC LARE TYPE names_table IS TABLA DE VARCHA


R2 (10); Los grados de TYPE IS TABLE D 'INTEGER; n
ombres_tabla de nombres; marcar las notas; entero t
otal; BEGIN nombres: = nombres_tabla ( 'Kavita ', 'Pri
tam ', 'Ayan ', 'Rishav ', 'Aziz '); notas: = notas (98, 97,
78, 87, 92); total: = names.count; dbms_output.put_li
ne ( 'Total ' || total || 'Estudiantes '); FOR i IN 1 .. total
LOOP dbms_output.put_line ( 'Estudiante: ' || nombre
s (i) || ', Marcas: ' || marcas (i)); bucle nal; FIN; /

Cuando el codigo anterior se ejecuta en el indicador


SQL, produce el siguiente resultado:

Total 5 estudiantes Estudiante: Kavita , grados: 98 E


studiante: Pritam, puntos: 97 Estudiante: Ayan, punt
os: 78 Estudiante: Rishav, puntos: 87 Estudiante: Az
iz, puntos: 92 Procedimiento PL / SQL completado c
on exito.

Ejemplo

Los elementos de una tabla anidada tambien puede


n ser un % ROWTYPE de cualquier tabla base de dat
a o% TYPE de cualquier campo de tabla de base de
data. El siguiente ejemplo ilustra el concepto. Usare
https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 151/211
11/3/2021 PL / SQL - Guía rápida

mos la tabla CUSTOMERS almacenada en nuestra b


ase de data como -

Select * from customers; + ---- + ---------- + ----- + -----


------ + ---------- + | ID | NOMBRE | EDAD | DIRECCION
| SALARIO | + ---- + ---------- + ----- + ----------- + -------
--- + | 1 | Ramesh | 32 | Ahmedabad | 2000,00 | | 2 |
Khilan | 25 | Delhi | 1500,00 || 3 | kaushik | 23 | Kota |
2000,00 | | 4 | Chaitali | 25 | Mumbai | 6.500,00 | | 5
| Hardik | 27 | Bhopal | 8.500,00 | | 6 | Komal | 22 | M
P | 4.500,00 | + ---- + ---------- + ----- + ----------- + -----
----- +

DECLARE CURSOR c_customers es SELECCIONAR el


nombre DE los clientes; TYPE c_listES TABLE of cust
omerS.No.ame% type; nombre_lista lista_c: = lista_c c
ontador de enteros: = 0; BEGIN FOR n IN c_customer
s Contador de LOOP: = contador +1; name_list.exten
d; nombre_lista (contador): = n. nombre; dbms_outpu
t.put_line ( 'Cliente (' || contador || '): ' || nombre_lista
(contador)); END LOOP; FIN; /

Cuando el codigo anterior se ejecuta en el indicador


de SQ L, produce el siguiente resultado:

Cliente (1): Cliente Ramesh ( 2): Cliente Khilan (3): Cli


ente kaushik (4): Cliente Chaitali (5): Cliente Hardik

https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 152/211
11/3/2021 PL / SQL - Guía rápida

(6): Procedimiento Komal PL / SQL completado con e


xito.

Metodos de recoleccion
PL / SQL proporciona metodos de recoleccion integr
adosque facilitan el uso de colecciones. La siguiente
tabla enumera los metodos y su proposito -

S.

N Nombre y objetivo del metodo

EXISTS (n)

1 Devuelve VERDADERO si el enesimo elemento de


una coleccion existe; de lo contrario, devuelve FA
LSE.

COUNT

2 Devuelve el numero de elementos que contiene a

ctualmente una coleccion.

3
LÍMITE

Compruebe el tamano maximo de una coleccion.

https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 153/211
11/3/2021 PL / SQL - Guía rápida

PRIMERO

4 Devuelve los primeros numeros de indice (mas pe


quenos) de una coleccion que usa los indicesesto
s enteros.

ÚLTIMO

5 Devuelve los ultimos (mayores) numeros de indic

e de una coleccion que usa indices enteros.

ANTERIOR (n)

6 Devuelve el numero de indice que precede al indi

ce n en una coleccion.

N EXT (n)

7 Devuelve el numero de indice que sigue al indice

n.

EXTEND
8
Agrega un elemento nulo a una coleccion.

9
EXTEND (n)

https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 154/211
11/3/2021 PL / SQL - Guía rápida

Agrega n elementos nulos a una coleccion.

1 EXTEND (n, i)

0 Agrega n copias del elemento i th a una coleccion.

1 TRIM

1 Elimina un elemento del nal de una coleccion.

1 TRIM (n)

2 Elimina n elementos del nal de una coleccion.

BORRAR
1
Elimina todos los elementos de una coleccion, est
3
ableciendo COUNT en 0.

ELIMINAR (n)

Eliminar el n e elemento de una matriz asociativa


1
con una clave numerica o una tabla anidada. Si la
4 matriz asociativa tiene una clave de cadena, se eli

mina el elemento correspondiente al valor de la cl


ave. Si n es cero, DELETE (n) no hace nada.

https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 155/211
11/3/2021 PL / SQL - Guía rápida

1 BORRAR (m, n)

5 Elimina todos los elementos en el rango m ..n de


una matriz asociativa o una tabla anidada. Si m e
s mayor que n o si m o n es cero, DELETE (m, n ) n
o hace nada.

Excepciones de coleccion
La siguiente tabla proporciona las excepciones de c
oleccion y cuando se generan -

Excepcion de coleccion planteado en situaciones C

OLLECTION_IS_NULL Esta intentando operar en un

coleccion atomicamente nula. NO_DATA_FOUND Un

a pista apunta a un elemento que ha sido eliminad

o, o un n un elemento existente de una matriz asoci

ativa. SUBSCRIPT_BEYOND_COUNT Un indice super

a el numero de elementos de una coleccion. SUBSC

RIPT_OUTSIDE_LIMIT Un indice esta fuera del rang

o permitido. VALUE_ERROR Un indice es nulo o no

es convertible en tipo de clave. Esta excepcion pue

de ocurrir si la clave se de ne como un rango PLS_I

NTEGER y el indice esta fuera de ese rango.


https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 156/211
11/3/2021 PL / SQL - Guía rápida

PL / SQL - Transacciones

En este capitulo, tenemos transacciones en PL / SQ


L. Una transaccion de base de data es una unidad d
e trabajo atomica que puede constar de una o mas d
eclaraciones SQL asociadas. Se llama atomico porqu
e los cambios en la base de data causados por las d
eclaraciones SQL que componen una transaccion se
pueden con rmar colectivamente, es decir, renderiz
arson permanentes en la base de data o cancelados
(cancelados) de la base de data.

Una sentencia SQL ejecutada con exito y una transa


ccion comprometida no son lo mismo. Incluso si una
declaracion SQL se ejecuta correctamente, a menos
que la transaccion que contiene la declaracion este c
on rmada, se puede revertir y cualquier cambio real
izado por la declaracion o declaraciones se puede re
vertir.

Inicio y nalizacion de una tran


saccion
Una transaccion tiene un inicio y un nal . Una trans
accion comienza cuando ocurre uno de los siguiente
s eventos:

https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 157/211
11/3/2021 PL / SQL - Guía rápida

La primera instruccion SQL se ejecuta despues de co


nectarse a la base de data.

En cada nueva declaracion SQL emitida despues del


nal de una transaccion.

Una transaccion naliza cuando ocurre uno de los si


guientes eventos:

Se emite una declaracion COMMIT o ROLLBACK .

Se emite una instruccion DDL , como la instruccion C


REATE TABLE ; porque en este caso se ejecuta auto
maticamente un COMMIT.

https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 158/211
11/3/2021 PL / SQL - Guía rápida

Se emite una declaracion DCL , como una declaracio


n GRANT ; porque en este caso se ejecuta automatic
amente un COMMIT.

El usuario cierra la sesion de la base de data.

El usuario sale de SQL * PLUS emitiendo el comand


o EXIT , se ejecuta automaticamente un COMMIT.

SQL * Plus termina de forma anormal, un ROLLBAC


K se ejecuta automaticamente.

Una instruccion DML falla; en este caso, se realiza a


utomaticamente un ROLLBACK para cancelar esta in
struccion DML.

Con rmar una transaccion


https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 159/211
11/3/2021 PL / SQL - Guía rápida

Una transaccion se hace permanente al emitir el co


mando SQL COMMIT. La sintaxis general del coman
do COMMIT es -

COMMIT;

Por ejemplo,

INSERTAR EN CLIENTES (ID, NOMBRE, EDAD, DIREC


CIÓN, SALARIO) VALORES (1, 'Ramesh ', 32 , 'Ahmed
abad ', 2000.00); INSÉRTESE EN LOS VALORES DEL
CLIENTE (ID, NOMBRE, EDAD, DIRECCIÓN, SALARIO)
(2, 'Khilan ', 25, 'Delhi ', 1500.00); INSERTAR LOS VA
LORES DEL CLIENTE (ID, NOMBRE, EDAD, DIRECCIÓ
N, SALARIO) (3, 'kaushik ', 23, 'Kota ', 2000.00); INS
ERTE LOS VALORES DEL CLIENTE (ID, NOMBRE, ED
AD, DIRECCIÓN, SALARIO) (4, 'Chaitali ', 25, 'Mumbai
', 6500.00); INSERTAR LOS VALORES DEL CLIENTE
(ID, NOMBRE, EDAD, DIRECCIÓN, SALARIO) (5, 'Hard
ik ', 27, 'Bhopal ', 8500,00); INSERTAR LOS VALORE
S DEL CLIENTE (ID, NOMBRE, EDAD, DIRECCIÓN, SA
LARIO) (6, 'Komal ', 22, 'MP ', 4500.00); COMETER;

Rollback Transactions
Los cambios realizados en la base de data sin COM
MIT se pueden revertir usando el comando ROLLBA
CK.
https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 160/211
11/3/2021 PL / SQL - Guía rápida

La sintaxis general del comando ROLLBACK es -

ROLLBACK [TO SAVEPOINT ];

Cuando una transaccion se revierte debido a una sit


uacion sin precedentes, como una falla del sistema,
toda la transaccion desde una con rmacion es rever
tido automaticamente. Si no esta usando savepoint
, simplemente use la siguiente declaracion para reve
rtir todos los cambios -

ROLLBACK;

Savepoint s

Savepoints son tipos de marcadores que ayudan a


SAVEPOINT .

La sintaxis general del comando SAVEPOINT es -

SAVEPOINT ;

Por ejemplo

INSERTAR EN CLIENTES (ID, NOMBRE, EDAD, DIREC


CIÓN, SALARIO) VALORES (7, 'Rajnish ', 27, ' HP ', 95
00.00); INSERTAR LOS VALORES DEL CLIENTE (ID,
NOMBRE, EDAD, DIRECCIÓN, SALARIO) (8, 'Riddhi ',
21, 'WB ', 4500.00); SAVEPOINT sav1; ACTUALIZAR

https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 161/211
11/3/2021 PL / SQL - Guía rápida

CLIENTES CONFIGURAR SALARIO = SALARIO + 100


0; ROLLBACK TO sav1; ACTUALIZAR CLIENTES CON
FIGURAR SALARIO = SALARIO + 1000 DONDE ID =
7; ACTUALIZAR CLIENTES CONFIGURAR SALARIO =
SALARIO + 1000 DONDE ID = 8; COMETER;

ROLLBACK TO sav1 : esta declaracion revierte todos


los cambios hasta el punto en el que marco el punto
de guardado sav1.

Despues de eso, comenzaran los nuevos cambios q


ue realice.

Control automatico de transacci


ones
Para realizar un COMMIT automaticamente cada ve
z que un INSERT, UPDATE o DELETE se ejecuta, pue
de establecer la variable de entorno AUTOCOMMIT c
omo -

SET AUTOCOMMIT ON;

Puede desactivar el modo de validacion automatica


ue usando el siguiente comando -

SET AUTOCOMMIT OFF;

PL / SQL - Fecha y hora


https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 162/211
11/3/2021 PL / SQL - Guía rápida

En este capitulo discutiremos la fecha y hora en PL /


SQL. Hay dos classs de tipos de data relacionados c
on la fecha y la hora en PL / SQL:

1 Tipos de data de fecha y hora

2 Tipos de data de intervalo

Los tipos de data de fecha y hora son -

1 DATE

2 TIMESTAMP

3 TIMESTAMP CON HUSO HORARI


O

4 RELOJ CON HUSO HORARIO LOC


AL

Los tipos de data de intervalo son -

1 INTERVALO DE AÑO A MES

https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 163/211
11/3/2021 PL / SQL - Guía rápida

2 INTERVALO DE DÍA A SEGUNDO

Valores de campo para Tipos de


data de fecha y hora
Los tipos de data de fecha y hora e intervalo consta
n de campos . Los valores de estos campos determin
an el valor del tipo de data. pizarraA continuacion se
enumeran los campos y sus posibles valores para fe
chas-horas e intervalos.

< td style = "text-align :; vertical-align: middle; "> DA

Valores de fech Valores de ran


campo
a y hora validos go validos

- 4712 a 9999 (e Cualquier num

YEAR xcluyendo el an ero entero dife

o 0) rente cero

MES 01 a 12 0 a 11

01 a 31 (limitado p Cualquier entero

or los valores de distinto de cero

MES y AÑO, segu

https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 164/211
11/3/2021 PL / SQL - Guía rápida

n las reglas decal

endar for locale)

HORA 00 a 23 0 a 23

MINUTO 00 a 59 0 a 59

00 a 59.9 (n), do
nde 9 (n) es la pr 0 a 59,9 (n), do
ecision de las fra nde 9 (n) es la
cciones de tiemp
SEGUNDO precision del in
o en segundos
tervalo fraccio
El 9 (n) no es apli n de segundo
cable para DATE.

-12 a 14 (la playa


tiene en cuenta l
os cambios en el
TIMEZONE_HOU horario de veran
o) No aplicable
R
No aplicable par
a DATE o TIMEST
AMP.

TIMEZONE_MINU No aplicable
00 a 59
TE
https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 165/211
11/3/2021 PL / SQL - Guía rápida

No aplicable par
a DATE o TIMEST
AMP.

No aplicable par
TIMEZONE_REGI
a DATE o TIMES No aplicable
ON
TAMP.

No aplicable par

TIMEZONE_ABBR a DATE o TIMES No aplicable

TAMP.

Tipos de data y funciones de fe


cha y hora
Estos son los tipos de data de fecha y hora:

FECHA

Almacena informacion de fecha y hora en ccaractere


s y numeros Tipos de data. Se compone de informac
ion sobre el siglo, ano, mes, fecha, hora, minutos y s
egundos. Se especi ca como -

TIMESTAMP
https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 166/211
11/3/2021 PL / SQL - Guía rápida

Es una extension del tipo de data DATE. Almacena e


l ano, mes y dia del tipo de data DATE, asi como los v
alores de hora, minuto y segundo. Es util para almac
enar valores de tiempo precisos.

RELOJ CON ZONA HORARIA

Esta es una variante de TIMESTAMP que incluye un


nombre de region de zona horaria o un desplazamie
nto de zona horaria en su valor. El desplazamiento d
e la zona horaria es la diferencia (en horas y minuto
s) entre la hora local y UTC. Este tipo de data es util
para recopilar y evaluar informacion de fechas en re
giones geogra cas.

TIMESTAMP CON HUSO HORA


RIO LOCAL

Esta es otra variacion de TIMESTAMP que incluye u


n desplazamiento de zona horaria en su valor.

El siguiente horno de mesanit las funciones de fech


a de tiempo (donde, x tiene el valor de fecha y hora)
-

S. Nombre y deion de la funcion

https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 167/211
11/3/2021 PL / SQL - Guía rápida

No

ADD_MONTHS (x, y);


1
Agrega y meses a x .

LAST_DAY (X);
2
Devuelve el ultimo dia del mes.

MONTHS_BETWEEN (x, y);


3
Devuelve el numero de meses entre x y y.

NEXT_DAY (x, dia);

4 Devuelve la fecha y hora del dia siguiente desp

ues de x .

NEW_TIME;

5 Devuelve el valor de hora / dia de una hora z es

peci cada por el usuario.

REDONDO (x [, unidad]);
6
Ronda x .

https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 168/211
11/3/2021 PL / SQL - Guía rápida

7 SYSDATE

Devuelve la fecha / hora actual.

TRUNC (x [, unidad]);
8
Truncar x .

Funciones de marca de tiempo (donde, x tiene un va


lor de marca de tiempo) -

S.

N Nombre y deion de la funcion

FECHA Y HORA ACTUAL

1 Devuelve una HORA DE HORA CON ZONA HORA


RIA que contiene la hora actual de la sesion con l
a zona horaria de lasesion.

2
EXTRACTO ({YEAR | MONTH | DAY | HOUR | MIN
UTE | SECOND} | {TIMEZONE_HOUR | TIMEZONE_
MINUTE} | {TIMEZONE_REGION |} TIMEZONE_AB
BR) FROM x)

https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 169/211
11/3/2021 PL / SQL - Guía rápida

Extrae y devuelve un ano, un mes, un dia, hora, m


inuto, segundo o zona horaria desde x .

FROM_TZ (x, zona_tiempo);

3 Convierte TIMESTAMP x y la zona horaria especi


cada por time_zone en TIMESTAMP WITH TIME
ZONE.

LOCALTIMESTAMP

4 Devuelve un TIMESTAMP que contiene la hora loc

al en la zona horaria de la sesion.

SYSTIMESTAMP

5 Devuelve un RELOJ CON ZONA HORARIA que con


tiene la hora actual de la parte inferiore data, asi
como la zona horaria de la base de data.

SYS_EXTRACT_UTC (X);

6 Convierte TIMESTAMP WITH TIMEZONE x en un


TIMESTAMP que contiene la fecha y la hora en U
TC.

7
TO_TIMESTAMP (x, [formato]);
https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 170/211
11/3/2021 PL / SQL - Guía rápida

Convierta la cadena x en TIMESTAMP.

TO_TIMESTAMP_TZ (x, [formato]);

8 Convierta la cadena x en TIMESTAMP WITH TIME

ZONE.

Ejemplos

Los siguientes fragmentos de codigo demuestran el


uso de las funciones anteriores:

Ejemplo 1

SELECT SYSDATE FROM DUAL;

Salir -

31/08/2012 17:25:34

Ejemplo 2

SELECT TO_CHAR (CURRENT_DATE, 'DD-MM-YYYY H


H: MI: SS ') FROM DUAL;

Salida -

31-08-2012 05:26:14

https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 171/211
11/3/2021 PL / SQL - Guía rápida

Ejemplo 3

SELECT ADD_MONTHS (SY SDATE, 5) FROM DUAL;

Salida -

31/01/2013 17:26 : 31

Ejemplo 4

SELECCIONAR LOCALTIMESTAMP FROM DUAL;

Salida -

31/8/2012 5: 26: 55.347000 PM

Los tipos de data y las funcione


s de intervalo
Aqui estan los tipos de data de intervalo -

IINTERVAL AÑO A MES - Almacena un periodo de ti


empo usando campos de fecha y hora AÑO y MES.

https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 172/211
11/3/2021 PL / SQL - Guía rápida

INTERVALO DÍA A SEGUNDO: almacena un periodo


en terminos de dias, horas, minutos y segundos.

Funciones de rango

S.N
Nombre y deion de la funcion
o

NUMTODSINTERVAL (x, interval_unit);

1 Convierta el numero x en INTERVAL DAY AT LA


SEGUNDO.

NUMTOYMINTERVAL (x, interval_unit);

2 Convierte el numero x en un INTERVAL YEAR I


N MES.

TO_DSINTERVAL (x);

3 Convierta la cadena x en un INTERVALO DÍA A


DÍA SEGUNDO.

4
TO_YMINTERVAL(x);

Convierte la cadena x en INTERVALO DE AÑO A


MES.
https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 173/211
11/3/2021 PL / SQL - Guía rápida

PL / SQL - Salida DBMS

En este capitulo, discutiremos la salida DBMS en PL


/ SQL. DBMS_OUTPUT es un paquete integrado que
le permite ver resultados, depurar informacion y env
iar mensajes desde bloques, rutinas, paquetes y dis
paradores PL / SQL. Ya hemos utilizado este paquet
e a lo largo de nuestro tutorial.

Veamos un pequeno fragmento de codigo que most


rara todas las tablas de usuarios en la base de data.
Pruebelo en su base de data para todos los nombre
s de tablas enumerados -

BEGIN dbms_output.put_line (user || 'Tablas en la ba


se de data: '); FOR t IN (SELECT table_name FROM u
ser_tables) LOOP dbms_output.put_line (t.table_nam
e); END LOOP; FIN; /

Subrutinas DBMS_OUTPUT
El paquete DBMS_OUTPUT contiene las siguientes s
ubrutinas -

S. Subrutina y objetivo

N
https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 174/211
11/3/2021 PL / SQL - Guía rápida

DBMS_OUTPUT.DISABLE;
1
Desactiva la salida de mensajes.

DBMS_OUTPUT .ENABLE (bu er_size IN INTEG


ER DEFAULT 20000);

2 Habilite la salida de mensajes. Un valor NULO de

bu er_size representa un tamano de bufer ilimit


ado.

DBMS_OUTPUT.GET_LINE (linea OUT VARCHAR


2, estado OUT INTEGER);
3
Obtenga una sola linea de informacion almacen
ada en bufer.

DBMS_OUTPUT .GET_LINES (lineas OUT CHARA

4 RR, numlines IN OUT INTEGER);

Obtenga una matriz de las del bufer.

DBMS_OUTPUT .NUEVA LÍNEA;


5
Coloque un marcador de nal de linea.

https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 175/211
11/3/2021 PL / SQL - Guía rápida

6 DBMS_OUTPUT.PUT (elemento EN VARCHAR2);

Coloque una linea parcial en el bufer.

DBMS_OUTPUT .PUT_LINE (elemento EN VARCH

7 AR2);

Coloque una linea en el bufer.

Ejemplo
DECLARAR lineas dbms_output.chararr; num_lines n
umero; BEGIN: habilita el bufer con el tamano prede
terminado 20000 dbms_output.enable; dbms_ outp
ut.put_line ( '¡Hola jugador! '); dbms_output.put_line (
'¡Espero que hayas disfrutado de los tutoriales! '); db
ms_output.put_line ( '¡Diviertete explorando pl / sql!
'); num_lines: = 3; dbms_output.get_lines (lineas, num
_lines); FOR i IN 1..num_lines LOOP dbms_output.put_
line (lineas (i)); END LOOP; FIN; /

Cuando el codigo anterior se ejecuta en el indicador


SQL, produce el siguiente resultado:

¡Hola lector! ¡Espero que hayas disfrutado de los tut


oriales! ¡Diviertete explorando pl / sql! El procedimie
nto PL / SQL se completo con exito.
https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 176/211
11/3/2021 PL / SQL - Guía rápida

PL / SQL - Orientado a objetos

En este capitulo tenemos PL / SQL orientado a objet


os. PL / SQL permite de nir un tipo de objeto, lo que
ayuda a disenar una base de data orientada a objet
os en Oracle. Un tipo de objeto le permite crear tipos
compuestos. El uso de objetos le permite implement
ar objetos del mundo real con una estructura de dat
a y metodos especi cos para trabajar con ellos. Los
objetos tienen atributos y metodos. Los atributos so
n las propiedades de un objeto y se utilizan para al
macenar el estado de un objeto; y se utilizan metod
os para modelar su comportamiento.

Los objetos se crean utilizando la instruccion CREAT


E [OR REPLACE] TYPE. Aqui hay un ejemplo para cr
ear un objeto direccion simple que consta de alguno
s atributos:

CREAR O REEMPLAZAR TIPO direccion COMO OBJE


TO (casa_no varchar2 (10), calle varchar2 (30), ciuda
d varchar2 (20), estado varchar2 (10), codigo pin var
char2 (10)); /

Cuando el codigo anterior se ejecuta en el indicador


SQL, produce el siguiente resultado:

Tipo creado.
https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 177/211
11/3/2021 PL / SQL - Guía rápida

Creemos otro objeto cliente donde agruparemos los


atributos y metodos para tener una idea -

CREAR O REEMPLAZAR TIPO cliente COMO OBJETO


(numero de codigo (5), nombre varchar2 (30), contac
t_no varchar2 (12), direccion de direccion, visualizaci
on de procedimiento de miembro); /

Cuando el codigo anterior se ejecuta en el indicador


SQL, produce el siguiente resultado:

Tipo creado.

Creacion de instancias de un obj


eto
La de nicion de un tipo de objeto proporciona un pl
ano para el objeto. Para utilizar este objeto, debe cre
ar instancias de este objeto. Puedes accedera los atr
ibutos y metodos del objeto usando el nombre de la
instancia y el operador de acceso (.) de la siguiente
manera -

DECLARAR direccion de residencia; BEGIN residenci


a: = direccion ( '103A ', 'M.G.Road ', 'Jaipur ', 'Rajastha
n ', '201301 '); dbms_output.put_line ( 'Numero de cas
a: ' || residencia.no_de_casa); dbms_output.put_line (
'Calle: ' || residencia.street); dbms_output.put_line ( 'C

https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 178/211
11/3/2021 PL / SQL - Guía rápida

iudad: ' || residencia.ciudad); dbms_output.put_line (


'Estado: ' || residencia.stado); dbms_output.put_line (
'Pincode: ' || residencia.pincode); FIN; /

Cuando el codigo anterior se ejecuta en el indicador


de SQL, produce el siguiente resultado:

Numero de casa: 103A Street : MGRoad Ciudad: Jaip


ur Estado: Rajasthan Codigo PIN: 201301 El procedi
miento PL / SQL se completo correctamente.

Metodos de miembros
Los metodos de miembros se utilizan para manipula
r los atributos del objeto. Tu proveesla declaracion d
e un metodo miembro al declarar el tipo de objeto. E
l cuerpo del objeto de ne el codigo de los metodos
miembros. El cuerpo del objeto se crea utilizando la i
nstruccion CREATE TYPE BODY.

Los constructores son funciones que devuelven un


nuevo objeto como valor. Cada objeto tiene un meto
do constructor de nido por el sistema. El nombre de
l constructor es el mismo que el del tipo de objeto. P
or ejemplo:

residencia: = direccion ( '103A ', 'MGRoad ', 'Jaipur ',


'Rajasthan ', '201301 ');

https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 179/211
11/3/2021 PL / SQL - Guía rápida

Los metodos de comparacion se utilizan para compa


rar objetos. Hay dos formas de comparar objetos:

Metodo de mapa

El metodo de mapa es una funcion implementada d


e tal manera que su valor depende del valor de mod
alidad. Por ejemplo, para un objeto de cliente, si el c
odigo de cliente es el mismo para dos clientes, los d
os clientes pueden ser iguales.Por tanto, la relacion
entre estos dos objetos dependeria del valor del cod
igo.

Metodo de orden

El metodo de orden implementa la logica interna par


a comparar dos objetos. Por ejemplo, para un objeto
rectangular, un rectangulo es mas grande que otro r
ectangulo si sus dos lados son mas grandes.

Usando el metodo Map


Intentemos entender los conceptos anteriores usan
do el siguiente objeto rectangular -

CREAR O REEMPLAZAR TIPO rectangulo COMO OBJ


ETO (numero de longitud, numero de ancho, funcion
https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 180/211
11/3/2021 PL / SQL - Guía rápida

de miembro ampliar (numero inc) rectangulo de reto


rno, visualizacion del procedimiento de miembro, m
edida de la funcion de miembro del numero de retor
no de la tarjeta); /

Cuando el codigo anterior se ejecuta en el indicador


SQL, produce el siguiente resultado:

Tipo creado.

Creando el cuerpo del tipo -

CREAR O REEMPLAZAR EL TIPO BODY rectangulo C


FUNCIÓN DE MIEMBRO DE OMME ampliar (numero
inc) retorno rectangulo EST BEGIN retorno rectangul
o (se. Longitud + inc, ancho apropiado + inc); END ag
randar; La visualizacion del procedimiento del miem
bro IS START dbms_output.put_line ( 'Longitud: ' || lo
ngitud); dbms_output.put_line ( 'Ancho: ' || ancho); Pa
ntalla END; FUNCIÓN DE MIEMBRO DE TARJETA me
dicion numero de retorno COMIENZO return (sqrt (la
rgo * largo + ancho * ancho)); Medida nal; FIN; /

Cuando el codigo anterior se ejecuta en el indicador


SQL, produce el siguiente resultado:

Tipo de cuerpo creado.

https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 181/211
11/3/2021 PL / SQL - Guía rápida

Ahora usando el objeto rectangle y sus funciones mi


embro -

DECLARE r1 rectangle; rectangulo r2; rectangulo r3; i


nc_factor_number: = 5; COMIENZO r1: = rectangulo (3,
4); r2: = rectangulo (5, 7); r3: = r1.enlarge (inc_factor);
r3.display; IF (r1> r2) THEN - llamada de la funcion d
e medicion r1.display; ELSE r2.display; TERMINARA
SI; FIN; /

CuandoCuando el codigo anterior se ejecuta en el in


dicador SQL, produce el siguiente resultado:

Longitud: 8 Ancho: 9 Longitud: 5 Ancho: 7 Procedimi


ento PL / SQL se completo correctamente.

Usando el metodo Order


Ahora se podria lograr el mismo efecto usando un m
etodo Order . Recreemos el objeto rectangulo usand
o un metodo de comando:

CREAR O REEMPLAZAR TIPO rectangulo COMO OBJ


ETO (numero de longitud, numero de ancho, visualiz
acion de procedimiento de miembro, funcion de mie
mbro de orden medida (r rectangulo) devuelve el nu
mero); /

https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 182/211
11/3/2021 PL / SQL - Guía rápida

Cuando el codigo anterior se ejecuta en el indicador


SQL, produce el siguiente resultado:

Tipo creado.

Crear cuerpo de tipo -

CREAR O REEMPLAZAR el rectangulo TIPO CUERPO


COMO UN PROCEDIMIENTO DE MIEMBRO La pantal
la COMIENZA dbms_output.put_line ( 'Longitud: '| | lo
ngitud); dbms_output.put_line( 'Ancho: ' || ancho); Pa
ntalla END; ORDER MEMBER FUNCTION medida (r r
ectangulo) numero de retorno IS BEGIN IF (sqrt (self.
length * self.length + self.width * self.width)> sqrt (r.l
ength * r.length + r.width * r. ancho)) luego regresa
(1); ELSE return (-1); TERMINARA SI; Medida nal; FI
N; /

Cuando el codigo anterior se ejecuta en el indicador


SQL, produce el siguiente resultado:

Tipo de cuerpo creado.

Usando el objeto rectangle y sus funciones miembr


o-

DECLARE r1 rectangle; rectangulo r2; COMIENZO r1:


= rectangulo (23, 44); r2: = rectangulo (15, 17); r1.displ
ay; r2.display; IF (r1> r2) THEN - llamada de la funcio

https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 183/211
11/3/2021 PL / SQL - Guía rápida

n de medicion r1.display; ELSE r2.display; TERMINA


RA SI; FIN; /

Cuando el codigo anterior se ejecuta en el indicador


SQL, produce el siguiente resultado:

Longitud: 23 Ancho: 44 Largo: 15 Ancho: 17 Largo: 2


3 Ancho: 44 Procedimiento PL / SQL tCompletado sa
tisfactoriamente.

Herencia para objetos PL / SQL


PL / SQL le permite crear objetos a partir de objetos
base existentes. Para implementar la herencia, el ob
jeto ts base debe declararse como NO FINAL . El val
or predeterminado es FINAL .

Los siguientes programas demuestran la herencia e


n objetos PL / SQL. Creemos otro objeto llamado Tab
leTop , se hereda del objeto Rectangle. Para esto, ne
cesitamos crear el objeto rectangulo base -

CREAR O REEMPLAZAR TIPO rectangulo COMO OBJ


ETO (numero de longitud, numero de ancho, funcion
miembro ampliar (numero inc.) devolver rectangulo,
NO FINAL visualizacion del procedimiento miembro)
NO FINAL /

https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 184/211
11/3/2021 PL / SQL - Guía rápida

Cuando el codigo anterior se ejecuta en el indicador


SQL, produce el siguiente resultado -

Tipo creado.

Creando el cuerpo del tipo base -

CREAR O REEMPLAZAREL TIPO DE CUERPO rectan


gulo COMO FUNCIÓN DE MIEMBRO ampliar (numer
o inc) return rectangulo ES COMENZAR return recta
ngulo (soi .length + inc, self.width + inc); END agrand
ar; La visualizacion del procedimiento del miembro I
S START dbms_output.put_line ( 'Longitud: ' || longitu
d); dbms_output.put_line ( 'Ancho: ' || ancho); Pantall
a END; FIN; /

Cuando el codigo anterior se ejecuta en el indicador


SQL, produce el siguiente resultado:

Tipo de cuerpo creado.

Creacion de objeto hijo tabla -

CREAR O REEMPLAZAR TIPO tablero de mesa DEB


AJO de rectangulo (varchar2 material (20), pantalla
de procedimiento de miembro OVERRIDING) /

Cuando el codigo anterior se ejecuta en el indicador


SQL, produce el siguiente resultado:

https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 185/211
11/3/2021 PL / SQL - Guía rápida

Tipo creado.

Creando el cuerpo del tipo para el objeto hijo tableto


p

CREAR O REEMPLAZAR LA MATRIZ TYPE CORPS C


OMO ESCAPE DEL PROCEDIMIENTO DE MIEMBRO.
BEGIN dbms_output.put_line ( 'Longitud: ' || longitu
d); dbms_output.put_line ( 'Ancho: ' || ancho); dbms_o
utput.put_line ( 'Material: ' || material); Pantalla END;
/

Cuando el codigo anterior se ejecuta en el indicador


SQL, produce el siguiente resultado:

Tipo de cuerpo creado.

Usando el objeto tabla y sus funciones miembro -

DECLARE t1 table; tablero de mesa t2; BEGIN t1: = ta


blero de la mesa (20, 10, 'Madera '); t2: = tablero de l
a mesa (50, 30, 'Acero '); t1.display; t2.display; FIN; /

Cuando el codigo anterior se ejecuta en el indicador


de SQL, produce el siguiente resultado:

Longitud: 20 Ancho: 10 Material: Madera Longitud: 5


0 Ancho: 30 Material: Acero Procedimiento PL / SQL
completado con exito.

https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 186/211
11/3/2021 PL / SQL - Guía rápida

Objetos abstractos en PL / SQL


La clausula NO INSTANTIABLE vonos permite declar
ar un objeto abstracto. No puede utilizar un objeto a
bstracto tal cual; debera crear un subtipo o tipo hijo
de estos objetos para utilizar su funcionalidad.

Por ejemplo,

CREAR O REEMPLAZAR TIPO rectangulo COMO OBJ


ETO (numero de largo, numero de ancho, mostrar N
O INSTANTABLE NO FINAL DEL PROCEDIMIENTO D
E MIEMBRO) NO INSTANTABLE NO FINAL /

Cuando el codigo anterior se ejecuta en el indicador


de SQL, produce el siguiente resultado:

Tipo creado.

PL / SQL - Con guración del entorno


https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 187/211
11/3/2021 PL / SQL - Guía rápida

2020-11-19 22:02:08 |Tutorial de pl / ...

PL / SQL - Con guración del entornoEn


este capítulo, tenemos la con guración
del entorno PL / SQL. PL / SQL no es un
lenguaje de programación independiente;
es una herramienta en el entorno de
programación de Oracle. SQL * Plus es
una herramienta interactiva que le
permite ingresar sentencias SQL ...

PL / SQL - Bucles
2020-11-19 22:01:31 |Tutorial de pl / ...

PL / SQL - BuclesEn este capítulo tenemos


bucles en PL / SQL. Puede haber
ocasiones en las que necesite ejecutar un
bloque de código más de una vez. En
general, las instrucciones se ejecutan
secuencialmente: la primera instrucción
https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 188/211
11/3/2021 PL / SQL - Guía rápida

de una función se ejecuta primero,


seguida de la segunda, y así suces...

Preguntas y respuestas de PL / SQL


2020-11-19 22:01:17 |Tutorial de pl / ...

Preguntas y respuestas de PL /
SQLPreguntas y respuestas PL / SQL se
ha diseñado con la intención especial de
ayudar a los estudiantes y profesionales a
prepararse para los exámenes de
certi cación y las entrevistas de trabajo.
Esta sección proporciona una colección
útil de ejemplos de pregunt...

https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 189/211
11/3/2021 PL / SQL - Guía rápida

PL / SQL - Con guración del entorno


Tutorial de pl / sql

2020-11-19 22:02:08

PL / SQL - Con guracion del ent


orno

En este capitulo, tenemos la con guracion del entor


no PL / SQL. PL / SQL no es un lenguaje de program
acion independiente; es una herramienta en el entor
no de programacion de Oracle. SQL * Plus es una he
rramienta interactiva que le permite ingresar senten
cias SQL y PL / SQL en el simbolo del sistema. Estos
comandos luego se envian a la base de data para su
procesamiento. Una vez procesadas las instruccione
s, los resultados se devuelven y se muestran en la p
antalla.

Para ejecutar programas PL / SQL, debe tener el ser


vidor Oracle RDBMS instalado en su maquina. Esto
se encargara de la ejecucion de los comandos SQL. L
a version mas reciente de Oracle RDBMS es 11g. Pue

https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 190/211
11/3/2021 PL / SQL - Guía rápida

de descargar una version de prueba de Oracle 11g de


sde el siguiente enlace:

Descargar " Oracle 11g Express Edition

Debera descargar la version de 32 bits o 64 bits de l


a instalacion segun su sistema operativo. Suele hab
er dos archivos. Descargamos la version de 64 bits.
Tambien utilizara pasos similares en su sistema ope
rativo, independientemente de si es Linux o Solaris.

win64_11gR2_database_1of2.zip

win64_11gR2_database_2of2.zip

Despues de descargar los dos archivos anteriores, d


ebera descomprimirlos en un solo directorio de base
de data y bajo el cual encontrara los siguientes sub
directorios:

https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 191/211
11/3/2021 PL / SQL - Guía rápida

Paso 1

Ahora ejecutemos el instalador de la base de data O


racle usando el archivo del instalador. Aqui esta el pr
imero Puede proporcionar su identi cacion de corre
o electronicot marque la casilla como se muestra en
la siguiente captura de pantalla. Haga clic en el boto
n Siguiente .

https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 192/211
11/3/2021 PL / SQL - Guía rápida

Paso 2

Seras llevado a la siguiente pantalla; desmarque la c


asilla y haga clic en el boton Continuar para continu
ar.

https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 193/211
11/3/2021 PL / SQL - Guía rápida

Paso 3

Simplemente seleccione la primera opcion Crear y c


on gure la base de data usando el boton de radio y
haga clic en el boton Siguiente para continuar.

https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 194/211
11/3/2021 PL / SQL - Guía rápida

Paso 4

Suponemos que esta instalando Oracle con el propo


sito basico de aprendizaje y lo instala en su PC o co
mputadora portatil. Por lo tanto, seleccione la opcio
n Clase de escritorio y haga clic en el boton Siguient
e para continuar.

https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 195/211
11/3/2021 PL / SQL - Guía rápida

Paso 5

Proporcione una ubicacion donde instalara el servid


or Oracle. Simplemente modi que Oracle Base y los
demas Las ubicaciones se estableceran automatica
mente. Tambien debera proporcionar una contrasen
a, que sera utilizada por el DBA del sistema. Una vez
que haya proporcionado la informacion requerida, h
aga clic en el boton Siguiente para continuar.

https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 196/211
11/3/2021 PL / SQL - Guía rápida

Paso 6

Nuevamente, haga clic en el boton Siguiente para c


ontinuar.

https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 197/211
11/3/2021 PL / SQL - Guía rápida

Paso 7

Haga clic en el boton Finalizar > para continuar; esto


iniciara la instalacion del servidor real.

https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 198/211
11/3/2021 PL / SQL - Guía rápida

Paso 8

Tomara unos momentos, hasta que Oracle comience


a realizar la con guracion requerida.

https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 199/211
11/3/2021 PL / SQL - Guía rápida

Paso 9

Aqui esta la instalacion de Oracle copiara los archivo


s de con guracion necesarios. Deberia tardar un poc
o-

https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 200/211
11/3/2021 PL / SQL - Guía rápida

Paso 10

Una vez que se hayan copiado los archivos de la bas


e de data, aparecera el siguiente cuadro de dialogo,
simplemente haga clic en el boton Aceptar y salga.

https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 201/211
11/3/2021 PL / SQL - Guía rápida

Paso 11

Cuando l 'instalacion, tendra la siguiente ventana n


al.

https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 202/211
11/3/2021 PL / SQL - Guía rápida

Último paso

Ahora es el momento de veri car su instalacion. En


el simbolo del sistema, use el siguiente comando si
esta usando Windows -

sqlplus "/ as sysdba "

Deberia tener el indicador SQL donde va a escribire


sus comandos ys PL / SQL -

https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 203/211
11/3/2021 PL / SQL - Guía rápida

Editor de texto
La ejecucion de programas grandes desde el simbol
o del sistema puede perder inadvertidamente parte
de su trabajo. Siempre se recomienda utilizar archiv
os por lotes. Para utilizar archivos por lotes:

Escriba su codigo en un editor de texto, como Bloc d


e notas, Bloc de notas +, o EditPlus , etc.

https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 204/211
11/3/2021 PL / SQL - Guía rápida

Guarde el archivo con la extension .sql en el director


io de inicio.

Ejecute el simbolo del sistema SQL * Plus desde el d


irectorio donde creo su archivo PL / SQL.

Escriba @ le_name en el simbolo del sistema SQL *


Plus para ejecutar su programa.

Si no usa un archivo para ejecutar el s PL / SQL, asi q


ue simplemente copie su codigo PL / SQLy haga clic
derecho en la ventana negra que muestra el indicad
or SQL; utilice la opcion pegar para pegar el codigo c
ompleto en el simbolo del sistema. Finalmente, simp
lemente presione Enter para ejecutar el codigo, si a
un no se ha ejecutado.

https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 205/211
11/3/2021 PL / SQL - Guía rápida

PL / SQL - Guía rápida


2020-11-19 22:01:05 |Tutorial de pl / ...

PL / SQL - Guía rápidaPL / SQL -


PresentaciónEl lenguaje de programación
PL / SQL fue desarrollado por Oracle
Corporation a nales de la década de
1980 como un lenguaje de extensión de
procedimiento para SQL y la base de
datos relacional de Oracle. Aquí hay
algunos hechos notables sobre PL /
SQL:PL...

PL / SQL - Bucles Tutorial de pl / sql

2020-11-19 22:01:31

PL / SQL - Bucles

En este capitulo, tenemos bucles en PL / SQL. Puede


haber ocasiones en las que necesite ejecutar un blo
https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 206/211
11/3/2021 PL / SQL - Guía rápida

que de codigo mas de una vez. En general, las instru


cciones se ejecutan secuencialmente: la primera inst
ruccion de una funcion se ejecuta primero, seguida
de la segunda, y asi sucesivamente.

Los lenguajes de programacion proporcionan

Una instruccion de bucle nos permite ejecutar una in


struccion o un grupo de instrucciones varias veces y
esta es la forma general de una instruccion de bucle
en la mayoria de los lenguajes de programacion -

PL / SQL proporciona los siguientes tipos de bucle p


ara manejar los requisitos de bucle invertido. Haga c
lic en los siguientes enlaces para veri que sus detall
es.

https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 207/211
11/3/2021 PL / SQL - Guía rápida

S.

N Tipo de bucle y deion

PL / SQL Basic LOOP

En esta estructura de bucle, la secuencia de se col


oca entre las instrucciones LOOP y END LOOP. En
1
cada iteracion, se ejecuta la secuencia de instrucci
ones y luego se reanuda el control en la parte sup
erior del ciclo.

PL / SQL MIENTRAS LOOP

Repite una declaracion o un grupo de declaracion


2 es siempre que una condicion determinada sea v
erdadera. Prueba la condicion antes de ejecutar el
cuerpo del bucle.

PL / SQL PARA LOOP

Ejecuta una secuencia de instrucciones varias vec


3
es y abrevia el codigo que maneja la variable de b
ucle.

4 Bucles anidados en PL / SQL

https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 208/211
11/3/2021 PL / SQL - Guía rápida

Puede utilizar uno o mas bucles en cualquier otro


bucle basico, while o for.

Etiquetado de un bucle PL / SQL


Los bucles PL / SQL se pueden etiquetar. La etiqueta
debe estar rodeada por corchetes de doble angulo
(<>) y debe aparecer al comienzo de la instruccion L
OOP. El nombre de la etiqueta tambien puede apare
cer al nal de la instruccion LOOP. Puede usar la eti
queta en la declaracion EXIT para salir del ciclo.

El siguiente programa demuestra el concepto -

DECLARE i number (1); j numero (1); BEGIN <> FOR i I


N 1..3 LOOP <> FOR j IN 1..3 LOOP dbms_output.put_li
ne ( 'i es: ' || i || 'yj es: '|| j); END loop inner_loop; END l
oop external_loop; FIN; /

Cuando el codigo anterior se ejecuta en el indicador


SQL, produce el siguiente resultado:

i es: 1 y j es: 1 i es: 1 y j es: 2 i es: 1 y j es: 3 i es: 2 y j e


s: 1 i es: 2 y j es: 2 i es: 2 y j es: 3 i es : 3 yj es: 1 i es: 3
yj es: 2 i es: 3 yj es: 3 Procedimiento PL / SQL compl
etadonacido con exito.

Sentencias de control de bucle


https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 209/211
11/3/2021 PL / SQL - Guía rápida

Las sentencias de control de bucle modi can la ejec


ucion de su secuencia normal. Cuando el tiempo de
ejecucion abandona un ambito, todos los objetos au
tomaticos que se crearon en ese ambito se destruye
n.

PL / SQL admite las siguientes declaraciones de con


trol. Los bucles de etiquetas tambien ayudan a obte
ner control fuera de un bucle. Haga clic en los siguie
ntes enlaces para veri car sus detalles.

S.

N Declaracion de control y deion

Sentencia sentencia EXIT

La sentencia Exit completa el ciclo y el control sal


1
ta a la sentencia inmediatamente despues de EN
D LOOP.

declaracion CONTINUE

Hace que el bucle ignore el resto de su cuerpo e i


2
nmediatamente vuelva a probar su estado antes
de repetir.

3 instruccion GOTO

https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 210/211
11/3/2021 PL / SQL - Guía rápida

Trans ere el control a la declaracion etiquetada.


Aunque no se recomienda utilizar la instruccion G
OTO en su programa.

https://www.hebergementwebs.com/tutorial-de-pl-sql/pl-sql-guia-rapida 211/211

También podría gustarte