8
ESCUELA DE: Informática Aplicada A La Educación NOMBRE: Franklin Geovanny Yungán Gualli DOCENTE: Leonardo Ayavaca SEXTO: Semestre “A” RIOBAMBA- ECUADOR

Yungan geovanny 6_s_ti_2

Embed Size (px)

Citation preview

Page 1: Yungan geovanny 6_s_ti_2

ESCUELA DE: Informática Aplicada A La Educación

NOMBRE: Franklin Geovanny Yungán Gualli

DOCENTE: Leonardo Ayavaca

SEXTO: Semestre “A”

RIOBAMBA- ECUADOR

Page 2: Yungan geovanny 6_s_ti_2

PL/SQL (PROCEDURAL LANGUAGE/STRUCTURED QUERY LANGUAGE) - LENGUAJE DE PROGRAMACIÓN INCRUSTADO EN ORACLE

¿Qué es?

PL/SQL significa Procedural Language/Structured Query Language (una extensión de programación estructurada sobre SQL). PL/SQL ofrece un conjunto de instrucciones clásicos de la programación estructurada (instrucción condicional IF, loops o iteraciones, asignaciones), organizado dentro de bloques (lo que se explica más adelante), que complementan y amplían el alcance de SQL.

Sin duda que es posible crear aplicaciones sobre Oracle y SQL sin usar PL/SQL. Sin embargo, utilizar PL/SQL para realizar operaciones específicas de bases de datos, particularmente la ejecución de sentencias SQL, ofrece varias ventajas, incluyendo una estrecha integración con SQL, un mejor rendimiento a través del tráfico de red reducido, y la portabilidad (los programas PL/SQL pueden correr en cualquier instancia de base de datos Oracle). Por lo tanto, el código del front-end de muchas aplicaciones ejecuta tanto sentencias SQL como bloques PL/SQL, para maximizar el rendimiento al tiempo que mejora la capacidad de mantenimiento de las aplicaciones.

PL/SQL es un lenguaje estructurado con bloques. Un bloque PL/SQL es definido por las palabras clave declare, begin, exception, y end, que dividen el bloque en tres secciones

Declarativa: sentencias que declaran variables, constantes y otros elementos de código, que después pueden ser usados dentro del bloque ejecutable: sentencias que se ejecutan cuando se ejecuta el bloque manejo de excepciones: una sección especialmente estructurada para atrapar y manejar cualquier excepción que se produzca durante la ejecución de la sección ejecutable

Sólo la sección ejecutable es obligatoria. No es necesario que usted declare nada en un bloque, ni que maneje las excepciones que se puedan lanzar.

Un bloque es en sí mismo una sentencia ejecutable, por lo que se pueden anidar los bloques unos dentro de otros.

SQL es un lenguaje de consulta para los sistemas de bases de datos relaciónales, pero que no posee la potencia de los lenguajes de programación. No permite el uso de variables, estructuras de control de flujo, bucles... y demás elementos característicos de la programación. No es de extrañar, SQL es un lenguaje de consulta, no un lenguaje de programación.

Las funciones y procedimientos tipos de bloques con un nombre son discutidos con mayor detalle más adelante en este artículo, así como los paquetes. En pocas palabras, sin embargo, un paquete es un contenedor de múltiples funciones y procedimientos. Oracle extiende PL/SQL con muchos paquetes incorporados en el lenguaje.

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

Cuando se desea realizar una aplicación completa para el manejo de una base de datos relacional, resulta necesario utilizar alguna herramienta que soporte la capacidad de consulta del SQL y la versatilidad de los lenguajes de programación tradicionales.

Page 3: Yungan geovanny 6_s_ti_2

PL/SQL es el lenguaje de programación que proporciona Oracle para extender el SQL estándar con otro tipo de instruccione

Con PL/SQL se programar las unidades de la base de datos ORACLE, están son:

Procedimientos almacenados

Funciones

Triggers

Scripts

ORACLE:

Oracle Forms

Oracle Reports

Oracle Graphics

Oracle Aplication Server

El lenguaje PL-SQL permite soportar todas las consultas a la Base de Datos Oracle, ya que para manipular los datos se usan las mismas instrucciones del lenguaje SQL estándar usado en las Bases de Datos.

PL-SQL es un lenguaje que está estructurado en bloques de código, los que son utilizados para construir PL-SQL Packages en Oracle, PL-SQL Procedures en Oracle, PL-SQL Function en Oracley scripts de código. (Feuerstein, marzo 2012)

Los desarrolladores pueden construir sus bloques PL-SQL y almacenarlos como objetos en el entorno de la Base de Datos Oracle. Estos programas o paquetes en PL-SQL son ejecutados en el servidor lo que permite ahorrar recursos en el entorno del cliente.

Los programas o PL-SQL Packages en Oracle solo pueden ser accesados o ejecutados por los usuarios debidamente autorizados..

Ejemplo #1: Veamos estructuras de bloques:

/* PL-SQL Packages en Oracle */

Begin

< Instrucciones >

End;

Este ejemplo muestra un bloque básico de PL-SQL.

/* PL-SQL Packages en Oracle */

Begin

< Instrucciones >

Exception

< Tratamiento de excepciones >

Page 4: Yungan geovanny 6_s_ti_2

End;

En este ejemplo se muestra un bloque PL-SQL con la cláusula exception para controlar las excepciones que puedan ocurrir.

Ejemplo #2: Veamos los tipos de estructuras:

/* PL-SQL Packages en Oracle */

Create Procedure mi_proceso(mi_variable modo tipo_de_dato) As

<Declaración de variables>

Begin

< Instrucciones >

Exception

< Tratamiento de excepciones >

End mi_proceso;

En este ejemplo se muestra la estructura en PL-SQL de los PL-SQL Procedures en Oracle.

/* PL-SQL Packages en Oracle */

Create Function mi_funcion(mi_variable modo tipo_de_dato) Return tipo_de_dato Is

<Declaración de variables>

Begin

< Instrucciones >

Exception

< Tratamiento de excepciones >

End mi_funcion;

En este ejemplo se muestra la estructura en PL-SQL de una PL-SQL Function en Oracle.

Te propongo que pruebes de inmediato estos ejemplos en tu Base de Datos con tus propias tablas, PL-SQL Procedures en Oracle y PL-SQL Function en Oracle, para que comiences a ejercitar la mano y aprendas a dominar esta nueva técnica en tus PL-SQL Packages en Oracle Note que he llamado a la variable l mensaje. Normalmente uso el prefijo para variables locales variables definidas dentro del código de un bloque y el prefijo para variables globales definidas en un paquete. (Sevilla, noviembre 2011)

CARACTERÍSTICAS

Page 5: Yungan geovanny 6_s_ti_2

Tiene como característica principal que es un lenguaje procedural, que supera y amplia las capacidades del SQL estándar, por ejemplo, pueden definir secuencias de control, de flujo y toma de decisiones.

Los programas que son creados en PL-SQL, solo pueden compilarse si se utilizan herramientas de Oracle, tales como Fonts, Reports, etc., y también se implementa en un servidor de Bases de Datos PL-SQL, además de soportar todas las formas de manipulación de datos de SQL, incluye las siguientes características.

• Estructuras modulares. • El manejo de variables. • Control de excepciones. • Estructuras de control.

Estructura modular

En PL/SQL podemos distinguir 3 tipos de programas o bloques.

Bloques anónimos: Son los que no tienen nombre y comienzan con el DECLARE, es decir los que hemos ido viendo hasta ahora.

Procedimientos: Se trata del programa más utilizado en PL/SQL y su formato es el siguiente:

PROCEDURE <nombre_procedimiento> [(<lista de parámetros>)] IS [<declaraciones>] BEGIN <instrucciones>; [EXCEPTIONS <excepciones>;] END;

En el formato distinguimos dos partes claramente, la cabecera donde esta el nombre del procedimiento y los parámetros y el cuerpo donde se situá un bloque anónimo.

Funciones: similares a los procedimientos pero con la función añadida de que pueden devolver valores.

Si subís varias lineas y veis el ejemplo de control de excepciones, podéis ver que hemos utilizado un atributo como DBMS_OUTPUT. Bien pues esto lo que nos permite es visualizar en pantalla los resultados, tanto excepciones como mensajes. Lo utilizamos porque PL/SQL no dispone de órdenes o sentencias que capturen datos introducidos por teclado, ni tampoco para visualizar datos en pantalla.

DBMS_OUTPUT.PUT_LINE nos permite visualizar en pantalla, pero para que funcione correctamente tenemos que poner el SET SERVEROUTPUT a ON

Si queremos que un bloque nos pida algún dato tenemos que anteponer el símbolo & delante de la variable, de esta forma cuando el bloque llegue a ese punto nos pedirá por pantalla el valor.

Otra sentencia importante es la que nos permite visualizar los errores que hemos podido tener al crear el bloque o procedimiento. Esta sentencia es: show errors

Page 6: Yungan geovanny 6_s_ti_2

Si queremos que el bloque anónimo se ejecute directamente cuando terminamos de crearlo debemos poner el símbolo / que, ademas de guardar el bloque en el buffer, lo ejecuta.

También podemos guardar los bloques anónimos en ficheros para poderlos ejecutar posteriormente. Para ello ejecutamos la siguiente sentencia:

Todos los programas creados utilizando PL-SQL, de la misma manera los paquetes, pueden ser almacenados en la Base de Datos, como un dato más, lo cual optimiza el uso por parte del usuario cada línea de PL-SQL, tiene grupos de caracteres, que normalmente se conocen como Unidades Léxicas, estas están clasificadas en 4 grupos: • DELIMITADORES: Símbolos simples o compuestos, como por ejemplo operadores aritméticos, lógicos o relacionales, que cumplen con un objetivo específico en PL-SQL.

• IDENTIFICADORES: Compuesto por Constantes, Variables, Cursores, Subprogramas, Excepciones y Paquetes, que se invocan con el fin de nombrar objetos de programas y unidades dentro del PL-SQL.

• LITERAL: Es un valor específico, de tipo numérico, lógico, carácter o cadena, que no está representado por un identificador.

• COMENTARIO: Se encierran en los caracteres // para una sola línea y /* */ para un conjunto de líneas

Una vez cargado el fichero ejecutamos el bloque con la sentencia run nombre fichero o podemos hacer los dos pasos con una sola sentencia: start nombre fichero

Sin embargo para los procedimientos es totalmente distinto ya que al tener nombre se almacena automáticamente en la base de datos y para ejecutarlo tan solo tenemos que realizar la siguiente operación

Las excepciones sirven para tratar los errores y mensajes. Oracle tiene una serie de excepciones que son las más frecuentes y con las que la mayoría de la gente trabaja

PL/SQL Developer incluye varias herramientas que facilitarán tu trabajo de desarrollo. Puedes recompilar objetos inválidos, buscar texto en fuentes de bases de datos, importar y exportar tablas, generar datos de prueba, importar archivos de texto o ODBC data, compara información contenida en tablas, monitoriza los eventos de dbms_alert y de dbms_pipe, ve información sobre la sesión, etc.

Con el tiempo, se ha visto que la lógica empresarial y de aplicaciones tiende al uso de Oracle Server, por lo que la programación PL/SQL se ha convertido en una parte significativa del proceso de desarrollo. PL/SQL Developer se centra en su facilidad de uso, la calidad del código y la productividad, que son clave a la hora de crear aplicaciones con Oracle.

Page 7: Yungan geovanny 6_s_ti_2

Tipos de Datos: Cada una de las variables y las constantes deben ir asociadas a un tipo de dato, que tiene un grupo de características como formato de almacenamiento, restricciones y rango de valores válidos, y principalmente están divididos en dos grupos, Escalares y Compuestos.

• CHAR (Carácter): Almacena hasta 32767 datos de tipo carácter, o sea letras • VARCHAR (Carácter de longitud variable): Almacena datos de tipo carácter pero solo utiliza la cantidad necesaria. BOOLEAN (lógico): Se almacenan datos, de tipo booleano, es decir los datos de tipo True o False.

• DATE (Fecha): Almacena datos de fechas que están contenidas entre el año de 4712 a.C. hasta el 4712 D.C.

La sección declarativa en donde se declaran todas las constantes y variables que se van a utilizar en la ejecución del bloque.

Los lenguajes de cuarta generación son ciertas herramientas prefabricadas, que aparentemente

dan lugar a un lenguaje de programación de alto nivel que se parece más alidioma inglés que a

un lenguaje de tercera generación, porque se aleja más del concepto de "procedimiento". Pueden

acceder a bases de datos.

Procedimientos Almacenados

Procedimientos Almacenados: Es un programa o proceso que puede ser creado y guardado en la base de datos y que puede ser invocado en cualquier momento en un programa. Generalmente están escritos en lenguajes de Bases de Datos como PL-SQL para Oracle o PL-PgSQL para PostgreSQL.

La principal ventaja de un Procedimiento Almacenado, es que al ser invocado, este se ejecuta desde el servidor de la base de datos lo que hace que el proceso sea mucho más rápido, y deshaciéndose del exceso de carga al manejar grandes cantidades, ya que solo requiere enviar los resultados al usuario.

En general, los usos más comunes de Procedimientos Almacenados, van desde la implementación para validación de datos, utilizando detonadores, que están integrados a la misma Base de Datos, pasando por cumplir con la función de encapsular en un proceso más grande y complicado, de esta manera los últimos datos procesados serán los más rápidos.

La gran aplicación de los Procedimientos Almacenados, se presenta cuando una Base de Datos es accesada desde muchos sitios externos al servidor, lo cual genera que se embeba la lógica de todos los programas haciendo que esta sea más reducida, esto puede crear y mantener los sistemas relacionados Un buen ejemplo se presenta cuando se necesita realizar una acción en un servidor de una o muchas de las tablas de las Bases de Datos, para esto se utilizan los Procedimientos Almacenados auto creables. (galeon.com, 2014)

VENTAJAS Y DESVENTAJAS

Consiste en la ejecución de sentencias SQL o bloques PL/SQL a partir de una cadena de texto

Page 8: Yungan geovanny 6_s_ti_2

montadas de manera dinámica.

El uso de execute inmediata es muy cómodo para la construcción de sql dinámicos el problema es el parseo de estas sentencias. Las bind variables, evita parseos innecesarios. Para evitar SQL Injection en PL/SQL dinámico es importante utilizar bind variables en vez de concatenación de cadenas.

VENTAJAS:

Creación de sentencias en tiempo de ejecución

Interactivo con el usuario

Acceder a objetos no existentes en tiempo de compilación

Gestión de permisos de usuarios de forma dinámica

Permite ejecutar instrucciones DDL (create, alter, drop, grant, …)

DESVENTAJAS:

No siempre se forman las consultas más optimas

Problemas de seguridad por ataques de inyección SQL

(García, 2013)

Bibliografía Feuerstein, S. (marzo 2012). Construyendo con Bloques en PL/SQL. Oracle Magazine. Obtenido de

http://www.oracle.com/technetwork/es/articles/sql/construyendo-con-bloques-parte-1-1549135-esa.html

galeon.com. (2014). proyecto bases de datos. hispavista. Obtenido de http://proyectobasesdedatos.galeon.com/enlaces1416755.html

García, J. (2013). PL SQL dinámico. mundoDB. Obtenido de http://mundodb.es/pl-sql-dinamico

Sevilla, U. d. (noviembre 2011). Introducción a PL/SQL. STSII. Obtenido de http://www.lsi.us.es/docencia/get.php?id=5788