Está en la página 1de 46

Programación de Bases de Datos

Oracle - PLSQL

Centro de e-Learning SCEU UTN - BA.


Medrano 951 2do piso (1179) // Tel. +54 11 4867 7589 / Fax +54 11 4032 0148
www.sceu.frba.utn.edu.ar/e-learning
p. 2

Introducción a PL/SQL. Declaración de Variables.


Escritura de sentencias de ejecución.

Centro de e-Learning SCEU UTN - BA.


Medrano 951 2do piso (1179) // Tel. +54 11 4867 7589 / Fax +54 11 4032 0148
www.sceu.frba.utn.edu.ar/e-learning
p. 3

Presentación:
A continuación, comenzaremos con los primeros pasos para aprender programación de
bases de datos, utilizaremos la base de datos relacional del motor de Oracle para
practicar. Veremos como declarar variables, y como se escriben distintas sentencias de
ejecución.

Centro de e-Learning SCEU UTN - BA.


Medrano 951 2do piso (1179) // Tel. +54 11 4867 7589 / Fax +54 11 4032 0148
www.sceu.frba.utn.edu.ar/e-learning
p. 4

Objetivos:
Que los participantes*:
• Aprenden las ventajas de PLSQL.
• Aprendan a declarar variables.
• Aprendan a escribir sentencias básicas de PLSQL.
• Aprendan lo que es un cursor implícito.

Centro de e-Learning SCEU UTN - BA.


Medrano 951 2do piso (1179) // Tel. +54 11 4867 7589 / Fax +54 11 4032 0148
www.sceu.frba.utn.edu.ar/e-learning
p. 5

Consignas para el aprendizaje colaborativo

En esta Unidad los participantes se encontrarán con diferentes tipos de actividades que, en
el marco de los fundamentos del MEC*, los referenciarán a tres comunidades de
aprendizaje, que pondremos en funcionamiento en esta instancia de formación, a los
efectos de aprovecharlas pedagógicamente:

● Los foros proactivos asociados a cada una de las unidades.


● La Web 2.0.
● Los contextos de desempeño de los participantes.

Es importante que todos los participantes realicen algunas de las actividades sugeridas y
compartan en los foros los resultados obtenidos.

Además, también se propondrán reflexiones, notas especiales y vinculaciones a bibliografía


y sitios web.

El carácter constructivista y colaborativo del MEC nos exige que todas las actividades
realizadas por los participantes sean compartidas en los foros.

Centro de e-Learning SCEU UTN - BA.


Medrano 951 2do piso (1179) // Tel. +54 11 4867 7589 / Fax +54 11 4032 0148
www.sceu.frba.utn.edu.ar/e-learning
p. 6

Tomen nota*
Las actividades son opcionales y pueden realizarse en forma individual, pero siempre es
deseable que se las realice en equipo, con la finalidad de estimular y favorecer el trabajo
colaborativo y el aprendizaje entre pares. Tenga en cuenta que, si bien las actividades son
opcionales, su realización es de vital importancia para el logro de los objetivos de
aprendizaje de esta instancia de formación. Si su tiempo no le permite realizar todas las
actividades, por lo menos realice alguna, es fundamental que lo haga. Si cada uno de los
participantes realiza alguna, el foro, que es una instancia clave en este tipo de cursos,
tendrá una actividad muy enriquecedora.

Asimismo, también tengan en cuenta cuando trabajen en la Web, que en ella hay de todo,
cosas excelentes, muy buenas, buenas, regulares, malas y muy malas. Por eso, es
necesario aplicar filtros críticos para que las investigaciones y búsquedas se encaminen a
la excelencia. Si tienen dudas con alguno de los datos recolectados, no dejen de consultar
al profesor-tutor. También aprovechen en el foro proactivo las opiniones de sus compañeros
de curso y colegas.

Centro de e-Learning SCEU UTN - BA.


Medrano 951 2do piso (1179) // Tel. +54 11 4867 7589 / Fax +54 11 4032 0148
www.sceu.frba.utn.edu.ar/e-learning
p. 7

Componentes de Oracle

A ntes de comenzar a sumergirnos en el aprendizaje del lenguaje de programación


de bases de datos Oracle, es necesario conocer cuáles son los 3 elementos más
importantes que se tienen en esta tecnología. Los mismos permiten brindarle al
usuario la posibilidad de poder crear procesos y objetos de DB que se ejecutan en
bajo nivel, y por lo tanto mucho más rápidos que en cualquier lenguaje de alto nivel, como
ser Java, PHP y .NET.
Veamos la estructura…

La estructura de Oracle se denomina “Grid” o grilla y contiene la siguiente estructura:

✓ Bases de Datos Oracle

✓ Oracle Application Server (el servidor)

✓ Oracle Enterprise Manager Grid Control (la interfaz gráfica amigable al usuario)

Bases de Datos Oracle: Es diseñada para almacenar y gestionar la información de una


organización u empresa. La gestión permite reducir costos, y brindar un servicio de alta
calidad. ¿Como se logra esto? Haciendo más fácil la forma de configurar y de gestionar
requerimientos y pudiendo generar automáticamente tuning sobre las sentencias de SQL.

Si sos un cliente, no debes saber dónde está tu información almacenada o donde la


computadora la guarda. Solo debes solicitar la información o procesarla y luego Oracle te
la traerá automáticamente o te la procesará cuando lo solicites.

La base de datos puede almacenar:

• Planillas Excel
• Documentos de Word
• Presentaciones de PowerPoint
• XML
• Multimedia, como ser MP3, video, y gráficos.

Centro de e-Learning SCEU UTN - BA.


Medrano 951 2do piso (1179) // Tel. +54 11 4867 7589 / Fax +54 11 4032 0148
www.sceu.frba.utn.edu.ar/e-learning
p. 8

Oracle Application Server: Provee de una plataforma que soporta el desarrollo de


aplicaciones, integrando varias de ellas incluyendo J2EE, Web-Services, Portales, y
Business Intelligence. De esta forma miles de usuarios pueden acceder y correr las
aplicaciones al mismo tiempo sin sufrir una baja en la performance.

Oracle Enterprise Manager Grid Control: Es una consola completa, integrada que permite
manejar en forma centralizada tareas administrativas del entorno. De esta manera, se
puede tener Hardware variado que incluya nodos, bases de datos, application servers y
otras aplicaciones todo junto como si funcionaría como 1 sola instancia. Se puede de esta
manera, ejecutar “Jobs”, establecer políticas de seguridad, monitorear la performance y
automatizar procesos de una forma mucho más sencilla y eficiente.

Diagrama de Entidad Relación que utilizaremos en el curso

Es bueno tener en cuenta cuales van a ser las tablas y las relaciones entre ellas antes de
que comencemos a programar. La idea es que no pierdan tiempo en buscar, como se
relacionan las misma y focalizarse solamente en la resolución de ejercicios.

Este es el modelo…

Y para ser más detallista aún, les explico funcionalmente que contiene cada tabla…

Centro de e-Learning SCEU UTN - BA.


Medrano 951 2do piso (1179) // Tel. +54 11 4867 7589 / Fax +54 11 4032 0148
www.sceu.frba.utn.edu.ar/e-learning
p. 9

1. employees => Contiene el detalle de cada empleado que trabajan para un


departamento. Algunos de esos empleados no están asociados a

ningún departamento.

2. departments => Contiene el detalle de los departamentos en donde trabajan los


empleados. Cada departamento puede tener una relación que

representa a un manager de un departamento en la tabla de

empleados.

3. jobs => Contiene lo tipos de trabajo que puede tener cada empleado.
4. job_history => Contiene el historial de trabajos de cada empleado. Si el
empleado cambia de departamento relacionado con un tipo de

trabajo o cambia de tipo de trabajo dentro del mismo

departamento, se inserta un nuevo registro en esta tabla con la

información del tipo de trabajo antiguo.

5. locations => Contiene las direcciones de una oficina, almacén, o un sitio


productivo de una empresa en un país en particular.

6. regions => Contiene regiones como ser, America, Asia, Europa, etc.
7. countries => Contiene países, y su relación con las regiones.

Ahora sí, comencemos con PL/SQL

SQL (Lenguaje de consultas estructurada) es el primer lenguaje que se utiliza para acceder
y modificar la información que se almacena en las bases de datos relacionales.

Sin embargo, si uno quiere alterar la información de una forma condicional, existen algunas
limitaciones con este lenguaje.

Centro de e-Learning SCEU UTN - BA.


Medrano 951 2do piso (1179) // Tel. +54 11 4867 7589 / Fax +54 11 4032 0148
www.sceu.frba.utn.edu.ar/e-learning
p. 10

Por ejemplo, por cada empleado que se devuelve en una consulta, queremos verificar el
department_id y el salario. Dependiendo del departamento y de la performance del
empleado, se pagará un “bono” a cada uno de ellos.

Entendiendo el problema entonces, nosotros debemos, ejecutar sentencias de SQL,


recolectar la información y aplicar lógica sobre la misma. Una forma para hacer eso puede
ser, escribir sentencias de SQL por cada departamento y dar esos bonos a los

empleados de esos departamentos. También recordemos que tenemos que tener en cuenta
el salario del empleado. Esto parece un poco complicado.

Por lo tanto, esto parecería más fácil, si tenemos sentencias condicionales. PL/SQL está
diseñado para este tipo de requerimientos. Este provee la extensión de programación sobre
el lenguaje SQL.

PL/SQL:

1. Provee una estructura de unidades ejecutables que incluyen código de


programación.
2. Provee construcciones procedurales como ser:
a. Variables, constantes, y tipos de datos.
b. Estructuras de control, sentencias condicionales, y loops.
c. Unidades de programación reusables, que se escriben una sola vez, y se
ejecutan en reiteradas oportunidades.
PL/SQL define estructura de bloques para escribir código. Mantener y debuggear el código
es más fácil con este tipo de estructuras, una vez que se entiende el flujo y la ejecución de
la unidad del programa.

Centro de e-Learning SCEU UTN - BA.


Medrano 951 2do piso (1179) // Tel. +54 11 4867 7589 / Fax +54 11 4032 0148
www.sceu.frba.utn.edu.ar/e-learning
p. 11

Entorno de PL/SQL

PL/SQL contiene bloques con sentencias procedurales, y sentencias SQL. Cuando uno
sube un bloque PL/SQL al Server, la ingeniería del PL/SQL se divide o “parsea” en bloques.
El bloque PL/SQL identifica las sentencias procedurales y las sentencias SQL. Este envía
las sentencias procedulares, al “ejecutor se sentencias procedurales”, y por otro lado,
realiza la misma acción con las sentencias SQL pero “al ejecutor de sentencias de SQL”.
Todo, en forma separada.

Beneficios de PL/SQL

Cuáles son los beneficios del lenguaje de programación de base de datos Oracle, PL/SQL?
Ahora los vamos a enunciar y vamos a explicar cada uno de ellos para que te quedes
tranquilo de poder entenderlos.

✓ Integración de construcciones procedurales con SQL

✓ Mejora de Performance

✓ Desarrollo de programación modularizada

✓ Integración con herramientas de Oracle

Centro de e-Learning SCEU UTN - BA.


Medrano 951 2do piso (1179) // Tel. +54 11 4867 7589 / Fax +54 11 4032 0148
www.sceu.frba.utn.edu.ar/e-learning
p. 12

✓ Portabilidad

✓ Manejo de Excepciones

✓ Integración de construcciones procedurales con SQL


SQL no es un lenguaje procedural. Cuando se utiliza comando de SQL, el comando
le indica al database Server que es lo que tiene que hacer. Sin embargo, no le podes
especificar “cómo” hacerlo.

Por lo tanto, esta integración te provee una forma de manejar mejor el control de tus
sentencias SQL. Ya veremos más adelante ejemplos de esto.

✓ Mejora de Performance
Sin el lenguaje PL/SQL, no hay forma de combinar varias sentencias de SQL como
si fuera una sola unidad de ejecución. Si por ejemplo diseñamos, una aplicación con
Oracle Forms (Son formularios o pantallas que pueden servir como ABM’s), nosotros
tenemos varios campos en cada form. Cuando el form sube la información nosotros
tenemos que ejecutar varias sentencias de SQL. Dichas sentencias, son enviadas a
la base de datos una a la vez. Esto genera, un flujo en la red importante de cada una
de las sentencias enviadas, y reduce la performance en el modelo cliente/servidor.

Con PL/SQL, se pueden combinar todas estas sentencias de SQL en una sola unidad
de programación. La aplicación, envía todo el bloque a la base de datos en lugar de
enviar una por una las sentencias de SQL. Esto reduce significativamente el número
de llamadas a la base de datos.

Centro de e-Learning SCEU UTN - BA.


Medrano 951 2do piso (1179) // Tel. +54 11 4867 7589 / Fax +54 11 4032 0148
www.sceu.frba.utn.edu.ar/e-learning
p. 13

✓ Desarrollo de programación modularizada


La unidad básica de un programa PL/SQL es un bloque. Todos los PL/SQL contienen
bloques. Estos bloques pueden estar en forma de secuencia, o un bloque puede
estar adentro de otro bloque. Modularizar los programas tiene las siguientes
ventajas:

• Uno puede agrupar lógicamente sentencias relacionadas en los bloques.


• Uno puede tener bloques adentro de otros bloques para hacer una
programación más robusta.
• Uno puede descomponer una aplicación en módulos más pequeños. Si se
desarrolla una aplicación compleja, PL/SQL te brinda la posibilidad de
descomponerla en módulos más pequeños, manejables, y donde los mismos
estén relacionados.
• De esta forma, es fácil mantener el código y poder debuggearlo.

✓ Integración con herramientas de Oracle


El lenguaje PL/SQL está integrado en todas las herramientas de Oracle, como ser
Oracle Forms, Oracle Reports, Oracle Discoverer, etc. Cuando se utilizan estas
herramientas, el código PL/SQL reside en la base de datos, y solo las sentencias de
SQL son enviadas a la DB.

✓ Portabilidad
Los programas de PL/SQL pueden ejecutarse en el Oracle Server
independientemente del sistema operativo y la plataforma.

Centro de e-Learning SCEU UTN - BA.


Medrano 951 2do piso (1179) // Tel. +54 11 4867 7589 / Fax +54 11 4032 0148
www.sceu.frba.utn.edu.ar/e-learning
p. 14

Se puede escribir programas portables, como packages, y se pueden crear

librerías que pueden ser utilizadas en diferentes entornos.

✓ Manejo de Excepciones
PL/SQL te da la posibilidad de manejar y ocultar excepciones. Se pueden definir
bloques separados que gestionen estas excepciones.

Estructura de Bloque PL/SQL

DECLARE (Opcional)

Variables, cursores, excepciones de usuario

BEGIN (Mandatorio)

- Sentencias de SQL

- Sentencias de PL/SQL

EXCEPTION (Opcional)

- Acciones cuando los errores ocurren

END; (Mandatorio)

El bloque PL/SQL consiste en 3 secciones:

Centro de e-Learning SCEU UTN - BA.


Medrano 951 2do piso (1179) // Tel. +54 11 4867 7589 / Fax +54 11 4032 0148
www.sceu.frba.utn.edu.ar/e-learning
p. 15

1. Declarative (opcional).
Esta sección comienza con la palabra reservada “DECLARE” y termina con la

sección de ejecución “BEGIN”.

2. Ejecutable (requerida).
La sección ejecutable comienza con la palabra “BEGIN” y termina con la palabra
“END” seguido del “;” punto y coma. Esta sección a su vez puede incluir otros bloques
de PL/SQL.

3. Exception handling (opcional).


Esta sección se relaciona con la sección de “ejecución”. Comienza con la palabra
reservada “EXCEPTION”.

En los bloques de PL/SQL, las palabras reservadas, DECLARE, BEGIN, y EXCEPTION


no va seguidas del carácter “;” punto y coma. Sin embargo, la palabra “END”, todas
las sentencias de SQL y las sentencias de PL/SQL deben terminar con este carácter.

Tipos de Bloque de PL/SQL

PL/SQL dispone de distintos tipos de bloque. Estos bloques a su vez, pueden llamar a otros
bloques dentro de los mismos. Hay 3 tipos de bloques:

Centro de e-Learning SCEU UTN - BA.


Medrano 951 2do piso (1179) // Tel. +54 11 4867 7589 / Fax +54 11 4032 0148
www.sceu.frba.utn.edu.ar/e-learning
p. 16

1. Bloques anónimos

2. Procedimientos

3. Funciones

Bloques anónimos: Los bloques anónimos son bloques justamente “sin nombre”. Este tipo
de bloques no quedan almacenados en la base de datos y tienen que ser ejecutados cada
vez que se requiera de su lógica. Pueden ser almacenados en archivos “SQL” y ejecutados
las veces que se necesitan. Estos bloques dejan de existir luego de su ejecución.

Procedimientos y Funciones: Los subprogramas son complementarios a los bloques


anónimos. Llevan un nombre y son almacenados en la base de datos. Como son
identificados, pueden ser invocados desde cualquier aplicación en cualquier momento.
Pueden ser declarados tanto como “PROCEDURE” o como “FUNCTION”. Se utiliza un
procedimiento, para ejecutar ciertas acciones, y se utiliza una función cuando se quiere
ejecutar distintas acciones, pero retornar un resultado, como puede ser “Valido” o “Inválido”,
“Si” o “No”, etc.

Se pueden almacenar subprogramas en el servidor o a nivel de aplicación. Se puede utilizar


Oracle Forms y Oracle Reports y declarar funciones y procedimientos ahí mismo, y pueden
ser llamados desde otros procedimientos, otras funciones, e inclusive desde objetos de
base de datos como ser un Trigger (disparador).

Nota: La función es muy similar al procedure, la diferencia es que esta retorna un


valor.

Ejemplo de Bloque Anónimo

Ahora que empezamos a escribir código de programación, es necesario comentarte, que


existen 2 formas para poder analizar y corregir un programa en PL/SQL.

✓ “A la vieja ultranza”

✓ “Herramienta de Debut”

Centro de e-Learning SCEU UTN - BA.


Medrano 951 2do piso (1179) // Tel. +54 11 4867 7589 / Fax +54 11 4032 0148
www.sceu.frba.utn.edu.ar/e-learning
p. 17

En la primera opción, uno ejecutará el código de programación, y si el mismo da errores,


mostrará por pantalla un mensaje de salida. Escribiendo el comando “SHOW ERRORS”
sobre la interfaz, se desplegará cuál es el mensaje de error. Este mensaje dependerá
obviamente de cuál sea el o los errores en el código que nosotros escribimos, pero a veces
no indica exactamente cuál es el problema, o no indica justo la línea. Lo que recomiendo
en estos casos son 2 soluciones:

• Buscar en Internet el tipo de error


• Ir sacando líneas que pensamos que pueden causar el problema, luego ver si
el programa compila correctamente, y ahí nos vamos a dar cuenta cual es la
línea o las líneas con error y podremos corregirlo.
La segunda opción, tiene que ver con que hay herramientas generalmente pagas, que te
permiten ir recorriendo el programa línea por línea y podés observar donde está el
problema. El tema esta, en que nuevamente digo, son pagas :=).

Al principio todo parece más complicado, pero créeme que con el tiempo ya te vas a ir
poniendo canchero en identificar donde están los problemas.

Entonces pasemos a ver un ejemplo concreto de programación de PL/SQL.

La sintaxis se irá aprendiendo en el curso más adelante. El bloque anónimo obtiene el


nombre del empleado cuyo employee_id es 100 y lo almacena en la variable f_name.

Escribimos en la consola el código, y hacemos “click” sobre el botón “execute”.

Centro de e-Learning SCEU UTN - BA.


Medrano 951 2do piso (1179) // Tel. +54 11 4867 7589 / Fax +54 11 4032 0148
www.sceu.frba.utn.edu.ar/e-learning
p. 18

Si el programa se ejecuta correctamente el lenguaje muestra el mensaje en recuadro rojo


que está en la imagen anterior “PL/SQL procedure successfully completed”.

Testear la Salida por pantalla de PL/SQL

Con el siguiente comando, se habilita la posibilidad de mostrar un mensaje por pantalla.

• SET SERVEROUTPUT ON
Y el comando que muestra el mensaje es un Oracle package y procedure dentro del mismo,
o sea…

• SET SERVEROUTPUT ON
….

DBMS_OUTPUT.PUT_LINE(´The First Name of the Employee is´||f_name);

En el ejemplo anterior, nosotros almacenamos en una variable “f_name” un valor. Sin


embargo, el valor de esa variable no se muestra en ningún lado. Para ello entonces, se
ejecutan las sentencias antes descriptas.

Centro de e-Learning SCEU UTN - BA.


Medrano 951 2do piso (1179) // Tel. +54 11 4867 7589 / Fax +54 11 4032 0148
www.sceu.frba.utn.edu.ar/e-learning
p. 19

La salida entonces sería :

Aclaración: Si estas utilizando Oracle Express, no pongas el comando del SET


SERVEROUPUT ON, esto va en la interfaz del programa SQL*PLUS que nosotros no
usamos en el curso, en el TOAD o SQL*NAVIGATOR que son otras interfaces para ejecutar
código de PLSQL tampoco va ese comando.

Centro de e-Learning SCEU UTN - BA.


Medrano 951 2do piso (1179) // Tel. +54 11 4867 7589 / Fax +54 11 4032 0148
www.sceu.frba.utn.edu.ar/e-learning
p. 20

Utilización de Variables en PL/SQL

Las variables son utilizadas para :

✓ Almacenar temporariamente información

✓ Manipulación de valores almacenados

✓ Reusabilidad

En PL/SQL se puede declarar variables y usarlas en una sentencia SQL y en sentencias


procedurales.

Las variables son utilizadas para almacenar información y manipular valores almacenados.
La sentencia anterior retorna el first_name y el department_id y luego debemos almacenar
estos valores. Para ello se pueden utilizar 2 variables distintas, para almacenaer dicha
información. Las variables pueden almacenar otras variables, otros tipos de datos, cursores
y subprogramas.

La reusabilidad es otra de las ventajas de declarar variables. Después de haberlas


declarado, las variables pueden ser utilizadas varias veces dentro de una aplicación,
referenciandolas en lugares como sentencias de SQL.

Identificadores

Los identificadores son utilizados para asignarle un “nombre” a una variable, y llevan una
forma de convención que se debe respetar teniendo en cuenta las siguientes reglas :

Centro de e-Learning SCEU UTN - BA.


Medrano 951 2do piso (1179) // Tel. +54 11 4867 7589 / Fax +54 11 4032 0148
www.sceu.frba.utn.edu.ar/e-learning
p. 21

✓ El nombre debe empezar con una letra

✓ El nombre incluye letras y números

✓ El nombre puede incluir caracteres especiales como el símbolo del dólar, el


“underscore”, etc

✓ El nombre no puede tener más de 30 caracteres de largo

✓ El nombre no puede ser igual a una palabra reservada de Oracle, como por ejemplo
“BEGIN”

Manejo de Variables en PL/SQL

Las variables son :

• Declaradas e inicializadas en la sección declarativa, “DECLARE”.

• Usar y asignar nuevos valores en la sección de ejecución, “BEGIN”.

• Pasadas como parámetros en los subprogramas de PL/SQL.

• Usadas para almacenar la salida de los subprogramas de PL/SQL.

Uno puede declarar variables en la zona declarativa de cada bloque PL/SQL, subprograma,
o package. Las declaraciones alocan espacio para el valor de las mismas, especifican un
tipo de dato, y definen un nombre donde pueden ser referenciadas. Las declaraciones
también permiten asignar un valor por defecto.

Centro de e-Learning SCEU UTN - BA.


Medrano 951 2do piso (1179) // Tel. +54 11 4867 7589 / Fax +54 11 4032 0148
www.sceu.frba.utn.edu.ar/e-learning
p. 22

En la zona de ejecución, el valor por defecto de la variable puede ser reemplazado por un
nuevo valor.

Los subprogramas pueden tener parámetros. Se pueden pasar variables como parámetros
a los subprogramas.

Como mencionamos anteriormente, la diferencia entre los procedimientos y las funciones


es que las segundas retornar siempre un valor, y estas variables pueden ser ese valor.

Veamos algunos ejemplos a continuación…

Veamos más ejemplos…

1. La variable “Myname” es declarada en la zona declarativa del bloque. La variable


puede ser accedida en la sección de “ejecución” del mismo bloque. Evalor “John”
Centro de e-Learning SCEU UTN - BA.
Medrano 951 2do piso (1179) // Tel. +54 11 4867 7589 / Fax +54 11 4032 0148
www.sceu.frba.utn.edu.ar/e-learning
p. 23

es asignado en esta última sección. Todo lo que es string o VARCHAR2 tiene que
ir entre comillas simples. El procedimiento PUT_LINE es invocado utilizando la
variable “Myname”. El valor de la variable es concatenado con el string “My name is
:”. La salida de este bloque anónimo es :
My name is:

My name is: John

PL/SQL procedure successfully completed.

2. En este bloque, la variable “Myname” es declarada e inicializada en la sección


declarativa. Myname almacenara el valor de John después de la inicialización. Este
valor es manipulado en la sección de ejecución del bloque. La salida de este
bloque anónimo será :
My name is: Steven

PL/SQL procedure successfully completed.

Centro de e-Learning SCEU UTN - BA.


Medrano 951 2do piso (1179) // Tel. +54 11 4867 7589 / Fax +54 11 4032 0148
www.sceu.frba.utn.edu.ar/e-learning
p. 24

Tipos de Variables

Todas las variables llevan un “tipo” de datos. Si queremos que la variable almacene :

1. Un valor de “VERDADERO” o “FALSO” o “TRUE” o “FALSE” el tipo de dato será


“BOOLEAN”.

2. Un valor de Fecha tipo “25-ENE-01” el tipo de dato será “DATE”.

3. Un valor numérico como “999.99” el tipo de dato será “NUMBER”.

4. Un valor string o de caracteres como por ejemplo “Atlanta” el tipo de dato será
“VARCHAR2”.

5. Un valor string o de caracteres mayor a 4000, el tipo de dato será “LONG”.

6. Una imagen el tipo de dato será “BLOB”.

Centro de e-Learning SCEU UTN - BA.


Medrano 951 2do piso (1179) // Tel. +54 11 4867 7589 / Fax +54 11 4032 0148
www.sceu.frba.utn.edu.ar/e-learning
p. 25

Utilización de atributo %Type

Generalmente las variables de PL/SQL son declaradas para almacenar y manipular la


información almacenada en la base de datos. Cuando uno declara una variable se tiene
que asegurar que el tipo de datos y el largo sean correctos. Si esto no ocurre PL/SQL
lanzara un error de ejecución.

En lugar de utilizar un harcoding para definir un tipo de datos y precisión de una variable,
se puede utilizar el atributo “%TYPE”, que permite que se defina una variable con el tipo de
dato de otra variable, o bien con una columna de una tabla de la base de datos.

De esta manera podemos evitar :

1. Errores de tipo de datos y de precision.


2. Se puede evitar un hardcoding del tipo de datos de una variable.
Si una columna cambio de tipo de dato no es necesario hacerlo con la variable. Veamos
entonces algunos ejemplos…

En la imagen anterior, declaramos variables para almacenar el apellido de un empleado. La


variable “emp_lname” esta definida para ser el mismo tipo de dato que la columna
“last_name” en la tabla de “empleados”. El atributo “%TYPE” provee el tipo de dato de la
columna de una tabla de la base.

Declarar variables para almacenar el balance de una cuenta bancaria, y también el mínimo
balance, que es 1000. La variable min_balance es definida para que tenga el mismo tipo de
dato que la variable “balance”. El atributo “%TYPE” provee el tipo de dato de la variable.

Una columna de base de datos del tipo “NOT NULL” no aplica como restricción a variables
que estan declaradas con el %TYPE. Es decir…

Columna : employee.employee_id NOT NULL

Variable : v_employee_id

Centro de e-Learning SCEU UTN - BA.


Medrano 951 2do piso (1179) // Tel. +54 11 4867 7589 / Fax +54 11 4032 0148
www.sceu.frba.utn.edu.ar/e-learning
p. 26

No significa que en la variable v_employee_id no se puede poner valores nulos, se entiende


no ?.

Sustitución de Variables

La sustitución de variables se utiliza para ingresar un valor en tiempo de ejecución y que


este pueda cambiar cada vez que ejecutamos la sentencia.

Se utiliza el carácter “&” antes del nombre de la variable. De esta forma evitamos hacer un
hard coding del valor, o sea, poner un valor fijo para cuando se ejecuta la sentencia. Brinda
mayor flexibilidad.

Veamos un ejemplo…

En el ambiente de iSQL*Plus, las variables de sustitución pueden ser utilizadas para pasar
valores en tiempo de ejecución en los bloques de PL/SQL. Se puede referenciar variables
de sustitución en la sentencias de SQL poniendo el carácter ”&” como prefijo antes del
nombre de la variable. El valor del texto es sustituido en el bloque PL/SQL antes de que el
mismo sea ejecutado. Sin embargo, no se puede asignar varios valores en una misma
corrida a la misma variable.

Cuando se ejecuta el bloque, desde la consola de iSQL*Plus se despliega un mensaje por


pantalla para en este caso la variable “empno”, que es una variable de sustitución. Y se
ingresa el valor deseado.

Veamos como sería la salida por pantalla…

Centro de e-Learning SCEU UTN - BA.


Medrano 951 2do piso (1179) // Tel. +54 11 4867 7589 / Fax +54 11 4032 0148
www.sceu.frba.utn.edu.ar/e-learning
p. 27

1. Cuando uno ejecuta el bloque, iSQL*Plus muestra por pantalla el mensaje para
ingresar un valor a “empno”, que es la variable de sustitución. Por defecto el mensaje
que se muestra es “Enter value for <substitution variable>”. Luego hacer click en el
botón de “Continue”.
2. En este segundo punto, se puede observar la salidad por pantalla del valor de la
variable y del resultado de la consulta. Observemos que aparece tanto el valor
antiguo como el nuevo.
3. Si queremos que no aparezcan los valores de la variable por pantalla y solo el
resultado de la consulta podemos ejecutar este comando.
SET VERIFY OFF.

Aclaración: En el Oracle Express, en lugar de utilizar el “&”, tenes que utilizar dos
puntos “:”, este es una pequeña diferencia que hay con la interfaz que usamos en el
curso, son cosas pequeñas que cambian entre interfaz e interfaz, pero esta es una
de ellas.

Centro de e-Learning SCEU UTN - BA.


Medrano 951 2do piso (1179) // Tel. +54 11 4867 7589 / Fax +54 11 4032 0148
www.sceu.frba.utn.edu.ar/e-learning
p. 28

Como comentar código de Programación que no queremos que se ejecute

Oracle PL/SQL provee 2 formas de comentar código, o poner comentarios para que el
mismo sea mas entendible de leer y analizar.

1. La primera de ellas es utilizando “- -“, doble guión sobre la línea o las líneas que
queremos comentar.
2. Si queremos comentar un párrafo es más fácil utilizar “/* */”.

Vemos los ejemplos a continuación…

Funciones en PL/SQL

Las funciones de fila que seguramente aprendiste en SQL pueden ser utilizadas en PL/SQL,
te acordas cuáles eran ?.

Te enumero algunas para que refresques un poco la memoria :=).

1. LENGTH
2. UPPER
3. LOWER
4. INITCAP
5. SUBSTR
6. Etc
Recordá también que estas se aplican sobre cada registro a un campo en particular.

Veamos un ejemplo de como sería en PL/SQL la utilización de las mismas.

Centro de e-Learning SCEU UTN - BA.


Medrano 951 2do piso (1179) // Tel. +54 11 4867 7589 / Fax +54 11 4032 0148
www.sceu.frba.utn.edu.ar/e-learning
p. 29

Conversión de tipos de datos en PL/SQL

A veces es necesario convertir por ejemplo, un tipo de dato VARCHAR2 a number, para
realizar una operación, o por ejemplo un VARCHAR2 a un tipo DATE y compara fechas.

Hay 2 formas de hacerlo…

• Forma explícita, es decir especificando una función de conversión.


• Forma ímplicita, lo resuelve el motor de base de datos Oracle.
Veamos un ejemplo de esto…

Operadores en PL/SQL

Los siguientes operadores son iguales tanto en SQL como en PLSQL :


Centro de e-Learning SCEU UTN - BA.
Medrano 951 2do piso (1179) // Tel. +54 11 4867 7589 / Fax +54 11 4032 0148
www.sceu.frba.utn.edu.ar/e-learning
p. 30

1. Lógicos
2. Aritméticos
3. Concatenación
4. Paréntesis que controla el orden de operación
Operadores…

• +,-
• *, /
• ||
• =, <, >, <=, >=, <>, !=, IS NULL,LIKE, BETWEEN,IN
• NOT
• AND
• OR
Ejemplos de operadores…

1. En el primer ejemplo, se utiliza una variable “loop_count” y se le suma 1, actua como


si fuera un “contador”. Seguramente esa variable tiene que estar definida en la
sección “DECLARE”, e inicializada en 0.
2. En el segundo ejemplo, la varianle “good_sal” es de tipo boolean, dependiendo de lo
que almacene la variable ”sal”, y si el mismo esta o no dentro del rango de valores
50000 y 150000.
3. En el tercer ejemplo, la variable “valid” también es boolean y depende si la variable
“empno” tiene valor nulo o no.

Centro de e-Learning SCEU UTN - BA.


Medrano 951 2do piso (1179) // Tel. +54 11 4867 7589 / Fax +54 11 4032 0148
www.sceu.frba.utn.edu.ar/e-learning
p. 31

Indentación del código

Si bien, un código de programación compila y se ejecuta igual sin indentarlo o tabularlo,


para poder entender y analizar un proceso, siempre es altamente recomendable realizar
esta acción.

Es sumamente importante, que aprendas a codificar como sugiere los stándares de Oracle.

Te muestro un ejemplo para que lo analices…

Centro de e-Learning SCEU UTN - BA.


Medrano 951 2do piso (1179) // Tel. +54 11 4867 7589 / Fax +54 11 4032 0148
www.sceu.frba.utn.edu.ar/e-learning
p. 32

n un bloque PL/SQL utilizamos sentencias de SQL para mostrar filas por pantalla y también
para poder modificar esos registros de las tablas de la base de datos. Podemos utilizar
comandos DML (Data Manipulation Language – Lenguaje de Manipulación de Información)
y comandos de control de transacciones. Cuando utilicemos los comandos DML y de control
de transacción tengamos en cuenta lo siguiente:

✓ La sentencia “END;” marca el final del bloque PL/SQL no el final de una transacción.
Un bloque puede abarcar muchas transacciones. Y una transacción puede abarcar
varios bloques.

✓ PL/SQL no soporta directamente lenguaje DDL (Data Definition Language –


Lenguaje de definición de Datos) como ser CREATE TABLE, ALTER TABLE o
DROP TABLE. Si se quiere ejecutar este tipo de sentencia debe hacerse mediante
sentencias de SQL dinámicas dentro del bloque. El comando que se utiliza es
“EXECUTE IMMEDIATE” donde la misma toma la sentencia DDL como un
argumento, lo parsea y lo ejecuta como una sentencia dinámica.
Consideremos el siguiente ejemplo:

BEGIN

CREATE TABLE my_table AS SELECT * FROM employees;

END;

El ejemplo utilize directamente una sentencia DDL en el bloque. Cuando uno ejecuta el
bloque el error que desplegará Oracle será:

Create table my_table AS SELECT * FROM employees; *

ERROR at lime 5:

ORA-06550: line 5, column 1:

PLS-00103: Encountered the symbol “CREATE” when expecting one of the following:

¿Como lo arreglamos? De esta forma…

BEGIN

Centro de e-Learning SCEU UTN - BA.


Medrano 951 2do piso (1179) // Tel. +54 11 4867 7589 / Fax +54 11 4032 0148
www.sceu.frba.utn.edu.ar/e-learning
p. 33

EXECUTE IMMEDIATE ‘CREATE TABLE my_table AS SELECT * FROM

employees’;

END;

PL/SQL no soporta algunas sentencias de lenguaje de control de transacciones (DCL),


como ser GRANT o REVOKE. También se debe utilizar EXECUTE IMMEDIATE para esto.

Sin embargo, otras sentencias de tipo DCL si son soportadas. Se utiliza las sentencias de
control de transacción también para afirmar los cambios en la base de datos y que se hagan
permanentes o que se puedan deshacer. COMMIT, ROLLBACK, y SAVEPOINT son 3
sentencias que son utilizadas en el DCL. COMMIT hace efectivas las transacciones en la
DB. ROLLBACK deshace las transacciones realizadas luego del último COMMIT.
SAVEPOINT es utilizada para marcar un punto intermedio en el proceso de transacciones.
Los comandos de control de transacción son válidos en PL/SQL y pueden ser utilizados
directamente en la sección de “ejecución de un bloque” de PL/SQL.

Sentencias SELECT en PL/SQL

Tenemos que tener en cuenta 2 reglas para este tipo de sentencias:

• La cláusula “INTO” es requerida.


• Los querys deben retornar solo 1 fila, pero no más de 1.
Veamos un ejemplo…

La cláusula INTO, es mandataria, y se ubica entre el SELECT y el FROM. Se utiliza para


especificar las variables que van a estar asociadas a los campos que se escriban en el

Centro de e-Learning SCEU UTN - BA.


Medrano 951 2do piso (1179) // Tel. +54 11 4867 7589 / Fax +54 11 4032 0148
www.sceu.frba.utn.edu.ar/e-learning
p. 34

SELECT. Se debe especificar una variable por cada ítem que se encuentre en el SELECT,
y el orden de las variables se corresponde con el orden de los ítems en el SELECT. Utilizar
el INTO para asignar las variables utilizadas en PL/SQL.

Las sentencias SELECT en los bloques PL/SQL cumplen con la clasificación ANSI del SQL,
donde se aplica la siguiente regla: los queries solo retornan una fila. El query que retorna
más de una, o no retorna ninguna genera un error.

PL/SQL gestiona este tipo de errores utilizando el manejo de excepciones, que pueden ser
capturadas en la sección de “exceptions” con las siguientes excepciones:

• NO_DATA_FOUND

• TOO_MANY_ROWS

Se puede incluir una condición en el WHERE en la sentencia SQL, para que la misma
retorne una sola fila.

Nota: La sentencia SELECT con una cláusula INTO retorna una sola fila. Si el requerimiento
es retornar varias filas y operar con esta información, se deben utilizar cursores explícitos.

Ahora veamos un ejemplo con más de una variable…

En el ejemplo anterior, las variables “emp_hiredate” y “emp_salary” son declaradas en la


sección de “declaración” del bloque PL/SQL. En la sección de “ejecución” el valor de las
columnas “hire_date” y “emp_salary” del empleado con employee_id = 100, es retornado
de la tabla employees y es guardado en las variables “emp_hiredate” y “emp_salary”

Centro de e-Learning SCEU UTN - BA.


Medrano 951 2do piso (1179) // Tel. +54 11 4867 7589 / Fax +54 11 4032 0148
www.sceu.frba.utn.edu.ar/e-learning
p. 35

respectivamente. Observar como una cláusula INTO, con las sentencias SELECTs, asigna
valores de columna de la base de datos dentro de la variable PL/SQL.

Veamos qué pasa con una función de grupo en el SELECT…

En el caso anterior las variables “sum_sal” y “deptno” son declaradas en la sección


“declarativa” del bloque PL/SQL. En la sección de ejecución, el salario total de los
empleados con el department_id = 60, es computada con la función SUM.El valor calculado
es asignado a la variable “sum_sal”.

Nota : Las funciones de grupo no pueden ser utilizadas en la sintáxis de PL/SQL. Pueden
ser usadas en las sentencias SQL en un bloque PL/SQL como se muestra en el ejemplo.
Lo que no se puede realizar es lo siguiente :

sum_sal := SUM(employees.salary); ERROR !

El resultado de la imagen anterior sería el siguiente :

The sum of salary is 28800.

PL/SQL procedure successfully completed.

Convención de nombres

En las sentencias de PL/SQL que pueden llegar a ser ambiguas, el nombre de las columnas
de la base de datos toma precedencia sobre los nombre de las variables locales. El ejemplo
siguiente, retorna el hire_date (fecha de contratación) y la fecha de hoy de la tabla
employees del empleado_id = 176.
Centro de e-Learning SCEU UTN - BA.
Medrano 951 2do piso (1179) // Tel. +54 11 4867 7589 / Fax +54 11 4032 0148
www.sceu.frba.utn.edu.ar/e-learning
p. 36

Esta consulta genera un error en tiempo de ejecución, porque el nombre de las variables
es exactamente igual al nombre de las columnas de la tabla de la base de datos.

Las reglas a tener en cuenta con el nombre de las convenciones es la siguiente :

✓ Utilizar convención de nombre para evitar ambigüedad en la sentencia “WHERE”.


✓ Evitar utilizar nombre de columnas como nombre de identificadores.
✓ Errores de sintaxis pueden aparecer porque PL/SQL chequea primero los nombres.
✓ Evitar utilizar variables como palabras reservadas de Oracle.
✓ El nombre de las variables locales y los parámetros tienen precedencia por encima
de los nombres de las tablas de la DB.
✓ Los nombres de las columnas de las tablas de la DB tienen precedencia por
encima de las variables locales.

Centro de e-Learning SCEU UTN - BA.


Medrano 951 2do piso (1179) // Tel. +54 11 4867 7589 / Fax +54 11 4032 0148
www.sceu.frba.utn.edu.ar/e-learning
p. 37

Resumiendo la unidad, aprendimos los siguientes conceptos

✓ Identificar los productos de Oracle

✓ Identificar las tablas del modelo de datos que se utilizarán en este curso

✓ Integrar sentencias de SQL en un bloque anónimo de PL/SQL

✓ Identificar los beneficios de PL/SQL

✓ Diferenciación entre bloque anónimo, procedimiento y función

✓ Mensajes de salida en PL/SQL

✓ Identificar identificadores válidos y no válidos

✓ Declarar variables en la sección “DECLARE”

✓ Inicializar variables y utilizarlas en la sección de ejecución, “BEGIN”

✓ Utilización del atributo %TYPE

✓ Sustitución de Variables

✓ Literales

Centro de e-Learning SCEU UTN - BA.


Medrano 951 2do piso (1179) // Tel. +54 11 4867 7589 / Fax +54 11 4032 0148
www.sceu.frba.utn.edu.ar/e-learning
p. 38

✓ Como comentar el código

✓ Funciones de SQL en PL/SQL

✓ Conversión de Tipo de datos

✓ Operadores

✓ Indentación del código

✓ Cursores Implícitos

Centro de e-Learning SCEU UTN - BA.


Medrano 951 2do piso (1179) // Tel. +54 11 4867 7589 / Fax +54 11 4032 0148
www.sceu.frba.utn.edu.ar/e-learning
p. 39

Ejercicios prácticos de la Unidad 01

Ejercicio 1

¿Cuál de los siguientes bloques se ejecutan correctamente?

• BEGIN
END;

• DECLARE
amount NUMBER(10);

END;

• DECLARE
BEGIN

END;

• DECLARE
Amount NUMBER(10);

BEGIN

DBMS_OUTPUT.PUT_LINE(amount);

END;

Ejercicio 2

Ejecutar un bloque anónimo que muestre por pantalla el tradicional “Hello World”.

Ejercicio 3

Desarrollar una aplicación utilizando un bloque anónimo. El mismo deberá contener :

• Sección declarativa.
• Declaración de variables.
• Declaración de variables utilizando atributo “%TYPE”.
• Sección de ejecución.
Centro de e-Learning SCEU UTN - BA.
Medrano 951 2do piso (1179) // Tel. +54 11 4867 7589 / Fax +54 11 4032 0148
www.sceu.frba.utn.edu.ar/e-learning
p. 40

• Ingresar valores a variables en tiempo de ejecución.


• Retornar variables de la base de datos y almacenarla en variables que se utilicen en
una sentencia “SELECT…INTO…”.
Ejercicio 4

Identificar cual de los siguientes nombre de indentificadores son correctos :

1. today
2. last_name
3. today’s_date
4. Number_of_days_in_February_this_year
5. Isleap$year
6. #number
7. NUMBER#
8. number1to7

Ejercicio 5

Identificar la declaración e inicialización válidas e inválidas de variables :

• printer_name constant VARCHAR2(10);


• deliver_to VARCHAR2(10) :=Johnson;
• by_when DATE := SYSDATE + 1;

Ejercicio 6

Analizar el siguiente bloque anónimo y elegir la sentencia correcta

SET SERVEROUTPUT ON

DECLARE

Fname VARCHAR2(20);

Lname VARCHAR2(15) DEFAULT ‘fernandez’;

BEGIN
Centro de e-Learning SCEU UTN - BA.
Medrano 951 2do piso (1179) // Tel. +54 11 4867 7589 / Fax +54 11 4032 0148
www.sceu.frba.utn.edu.ar/e-learning
p. 41

DBMS_OUTPUT.PUT_LINE(FNAME ||’ ‘||lname);

END;

1. El bloque se ejecuta correctamente e imprime por pantalla “Fernandez”.


2. El bloque devuelve un error porque la variable fname es utilizada sin inicializarse.
3. El bloque se ejecuta correctamente y muestra por pantalla “null Fernandez”.
4. El bloque retorna un error porque no se puede utilizar la palabra reservada “DEFAULT”
para inicializar la variable de un tipo VARCHAR2.
5. El bloque retorna un error porque la variable FNAME no está declarada.

Ejercicio 7

Crear un bloque anónimo que contenga :

• Una sección declarativa. En la misma declarar las siguientes variables :


o “today” de tipo de dato fecha. Inicializarla con la palabra reservada SYSDATE
(que tiene la fecha actual).
o “tomorrow” del mismo tipo de dato que “today”. Utilizar el atributo “%TYPE”.
• En la sección de ejecución inicializar la variable “tomorrow” con una expresión que
calcule la fecha de mañana (agregando 1 al valor de “today”) imprimir el valor de
“today” y “tomorrow” después de imprimir por pantalla “Hello World”.
La salida debería ser :

Hello World

Today Is : Ejemplo : 12-Ene-04

Tomorrow Is : 13-Ene-04

PL/SQL procedure successfully completed.

Centro de e-Learning SCEU UTN - BA.


Medrano 951 2do piso (1179) // Tel. +54 11 4867 7589 / Fax +54 11 4032 0148
www.sceu.frba.utn.edu.ar/e-learning
p. 42

Soluciones de los ejercicios anteriores

Ejercicio 1

La respuesta correcta es la D.

El bloque A no se ejcuta porque la sección de ejecución no tiene ninguna sentencia.

El bloque B no se ejecuta porque falta la sección ejecutable con el “BEGIN”.

El bloque C tiene todas las partes pero no tiene sentencias en la sección de “ejecución”.

Ejercicio 2

SET SERVEROUTPUT ON

BEGIN

DBMS_OUTPUT.PUT_LINE('Hello World');

END;

Ejercicio 3

Este ejercicio es de libre construcción, no hay una única solución

Ejercicio 4

Identificar cual de los siguientes nombre de indentificadores son correctos :

1. today
2. last_name
3. today’s_date
4. Number_of_days_in_February_this_year
5. Isleap$year
6. #number
7. NUMBER#
Centro de e-Learning SCEU UTN - BA.
Medrano 951 2do piso (1179) // Tel. +54 11 4867 7589 / Fax +54 11 4032 0148
www.sceu.frba.utn.edu.ar/e-learning
p. 43

8. number1to7
1. Es válido
2. Es válido
3. Inválido. El carácter simple no es válido.
4. Inválido. Muchos caracteres de largo.
5. Válido.
6. Inválido. No puede comenzar con #.
7. Válido.
8. Válido.

Ejercicio 5

Identificar la declaración e inicialización válidas e inválidas de variables :

• printer_name constant VARCHAR2(10);


• deliver_to VARCHAR2(10) :=Johnson;
• by_when DATE := SYSDATE + 1;
1. Inválido. No está inicializada la constante con ningún valor.
2. Inválido. El nombre “Johnson” debe ir entre comillas simples por ser carácter.
3. Válido.

Ejercicio 6

Analizar el siguiente bloque anónimo y elegir la sentencia correcta

SET SERVEROUTPUT ON

DECLARE

Fname VARCHAR2(20);

Lname VARCHAR2(15) DEFAULT ‘fernandez’;

BEGIN

DBMS_OUTPUT.PUT_LINE(FNAME ||’ ‘||lname);

Centro de e-Learning SCEU UTN - BA.


Medrano 951 2do piso (1179) // Tel. +54 11 4867 7589 / Fax +54 11 4032 0148
www.sceu.frba.utn.edu.ar/e-learning
p. 44

END;

La respuesta correcta es : El bloque se ejecuta correctamente e imprime por pantalla


“Fernandez”.

Ejercicio 7

DECLARE

today DATE:= SYSDATE;

tomorrow today%TYPE;

BEGIN

tomorrow := today + 1;

DBMS_OUTPUT.PUT_LINE(‘Hello World’);

DBMS_OUTPUT.PUT_LINE(‘TODAY IS :’ || today);

DBMS_OUTPUT.PUT_LINE(‘TOMORROW IS :’ || tomorrow);

END;

Centro de e-Learning SCEU UTN - BA.


Medrano 951 2do piso (1179) // Tel. +54 11 4867 7589 / Fax +54 11 4032 0148
www.sceu.frba.utn.edu.ar/e-learning
p. 45

Bibliografía utilizada y sugerida


Libros y otros manuscritos
• Oracle 11g, SQL, PL/SQL, SQL*Plus – Jerome Gabillaud - SATISH ASNANI, PHI
Learning Private Limited (Julio 2013), ISBN-13: 978-8120340206.
• ORACLE 12c. Programación SQL*Plus, SQL y PLSQL - MARIA PEREZ MARQUES
- Amazon Digital Services, Inc. (Dic 2013), ASIN: B00HB8TC08
• Oracle 11g PL/SQL – Antolin Muñoz Chaparro - RC Libros (Ene 2013), ASIN:
B00AWR6V6I

Centro de e-Learning SCEU UTN - BA.


Medrano 951 2do piso (1179) // Tel. +54 11 4867 7589 / Fax +54 11 4032 0148
www.sceu.frba.utn.edu.ar/e-learning
p. 46

Lo que vimos:
En esta unidad, conocimos los primeros conceptos para programar en bases de
datos relacionales. Aprendimos la parte declarativa y algunas sentencias básicas
de programación, y también como comentar código cuando es necesario hacerlo.

Lo que viene:
Ahora pasaremos a conocer como interactuar con Oracle Server y aprenderemos
como escribir distintas estructuras de control y lo que son los cursores explícitos.

¡Avancemos!

Centro de e-Learning SCEU UTN - BA.


Medrano 951 2do piso (1179) // Tel. +54 11 4867 7589 / Fax +54 11 4032 0148
www.sceu.frba.utn.edu.ar/e-learning

También podría gustarte