capitulo 2

20
Escribiendo declaraciones ejecutables

Upload: diego-guaman

Post on 30-Jun-2015

1.543 views

Category:

Technology


3 download

TRANSCRIPT

Page 1: Capitulo 2

Escribiendo declaraciones ejecutables

Page 2: Capitulo 2

Después de completar ésta lección, usted deberá poder hacer lo siguiente:

Describir el significado de la sección ejecutable Usar correctamente los identificadores Escribir declaraciones en la sección ejecutable Describir los roles de los bloques anidados Ejecutar y hacer pruebas en bloques PL/SQL Usar convención de códigos

Objetivo de la lecciónEn ésta lección, usted aprenderá a como escribir código

ejecutable en el bloque PL/SQL. Usted también aprenderá los roles de código de los bloques anidados en PL/SQL, así como ejecutar y realizar pruebas con el código PL/SQL.

Page 3: Capitulo 2

Porque PL/SQL es una extensión de SQL, las normativas generales de sintaxis de SQL también se aplican al lenguaje PL/SQL.

La línea de texto de PL/SQL contiene grupo de caracteres conocidos como unidades léxicas, estos pueden clasificarse en los siguientes:

• Delimitadores (símbolos simples y compuestos)• Identificadores, incluyen palabras reservadas• Literales• Comentarios

Para mejorar la legibilidad, usted puede separar con espacios las unidades léxicas. De hecho, se debe separar los identificadores adyacentes por un espacio o puntuación

No se debe incrustar espacios en unidades léxicas excepto para cadenas de literales y comentarios

Las sentencias pueden separare al otro lado de la línea, pero palabras reservadas no se pueden separar

Page 4: Capitulo 2

Los identificadores se usan para nombrar ítems de programas y unidades de PL/SQL. Pueden incluir constantes, variables, excepciones, cursores, cursores variables, subprogramas y paquetes.

- Los identificadores pueden contener hasta de 30 caracteres, pero deben empezar con caracteres alfabéticos.

- No se debe elegir el mismo nombre para el identificador como el nombre de columna de la tabla usada en el bloque. Si el identificador PL/SQL es el mismo que el de las sentencias SQL y tiene el mismo nombre de la columna. Entonces Oracle asume que ésta columna es referenciada

- Un identificador consiste de una letra, opcionalmente seguida de más letras, numerales, signo de dólar, raya abajo, y signos de número. Otros caracteres tal como guiones, slashes, y espacios son ilegales, los siguientes ejemplos muestran:

dots&dashes -- illegal ampersand debit-amount -- illegal guión on/of -- illegal slash user id -- illegal espacio

Los ejemplos money$$$treee, SN##, try _again_are muestran que contiguo a signos de dólar, raya abajo y signos de dólar son permitidos

Page 5: Capitulo 2

Un literal es un valor de número explicito, carácter, cadena o booleano que no es representado por un identificador

- Un carácter literal incluye todos caracteres imprimibles en PL/SQL caracteres como: letras, numerales, espacios y símbolos especiales

- Un literal numérico puede ser representado como un simple valor (por ejemplo, -32.5) o en notación científica (por ejemplo, 2E5, significa 2*(10 a la potencia de 5) = 200000).

Un programa PL/SQL es terminado y ejecutado con un slash (/)

Page 6: Capitulo 2

Comentar código de documento cada fase y ayudar a depurar. Comentar el código PL/SQL con dos guiones(--)si el comentario es en una línea, o encerrar el comentario entre los símbolos /* y */ si el comentario tiene más líneas. Los comentarios son información estricta y no hacen cumplir condiciones o comportamiento lógico de los datos. Los comentarios bien escritos son extremadamente valiosos para legibilidad de código y mantenimiento de futuro código.

Page 7: Capitulo 2

La mayoría de las funciones disponibles en SQL también son válidas en expresiones PL/SQL

- Funciones de número simple-fila- Funciones de carácter simple-fila- Función de conversión de tipo de datos- Función de fechas- Functiones de timestap- GREATEST, LEAST- Función de Micelanios

Las siguientes funciones no están disponibles en sentencias procedimentales DECODE Funciones de Grupo como AVG, MIN, MAX, COUNT, SUM, STDDRV, y VARIANCE, Las

funciones de grupo se aplican a a grupo de filas en la tabla por lo tanto solamente son disponibles en sentencias SQL y en el bloque PL/SQL

Page 8: Capitulo 2

La mayoría de las funciones SQL pueden usarse en PL/SQL. Estas funciones ayudan a manipular datos, éstas caen dentro de las siguientes categorías:

Números Caracteres Conversión Fechas Miselanious

La función de ejemplo en la diapositiva define lo siguiente:• Construcción de nombre de direcciones mail para una compañía• Convertir el nombre a minúsculas

CHR es una funcion de SQL que convierte código ASCII al carácter correspondiente, 10 es el código para salto de línea

PL/SQL tiene su propia función de gestión de errores que son: SQLCODE SQLERRM (Es la función de manejo de errores y serán discutidos

en el curso siguiente)

Page 9: Capitulo 2

PL / SQL intenta convertir tipos de datos dinámicamente si se mezclan en una declaración. Por ejemplo, si usted asigna a NUMBER el valor de una variable CHAR, PL/SQL trastada dinámicamente en numero dentro de una representación de carácter, y estos pueden ser almacenados en una variable CHAR. La situación contraria igual es aplicada, siempre que la expresión de carácter represente un valor numérico.

Si ellos son compatibles, usted puede asignar caracteres de variables de dato y viceversa.

A menos de expresiones, usted debería hacer tipo de datos iguales. Si ocurre que en una expresión se mezcla tipo de datos, usted deberá usar la apropiada función de conversión de datos

Syntax

TO_CHAR (value, fmt)

TO_DATE (value, fmt)

TO_NUMBER (value, fmt)

Donde: value es una cadena de caracteres, números o datos

Fmt es un formato de modelo usado para convertir valores

Page 10: Capitulo 2

v_date := ‘January 13, 2001’

La conversión del ejemplo define lo siguiente:

Almacena la cadena de caracteres que representa una fecha en una variable declarada DATE de tipo fecha. Este código causa un error de sintaxis

Page 11: Capitulo 2

v_date := TO DATE (`January 13, 2001´, `Month DD, YYYY`)

Lo correcto del error de la anterior diapositiva, es convertir la cadena a fecha con la función de conversión TO_DATE.

PL/SQL intenta la conversión si es posible, pero esto depende de la operación que empieza a llevar a cabo. Si practica buena programación el rendimiento explicito le hará llevar a cabo la conversión de tipo de datos, porque ellos pueden afectar favorablemente a llevara cabo y permanecer constantes con el cambio de versiones de software.

Page 12: Capitulo 2

Una de las ventajas de PL/SQL en relación con SQL es la habilidad de anidar sentencias. Usted puede anidar bloques donde quiera ejecutar sentencias de asignación, así hacer sentencias de bloque anidados. Por lo tanto, usted puede romper partes de bloque ejecutables en bloques pequeños. La sección de excepción puede contener bloques anidados iguales.

Variables de Ámbito Referencias a un identificador para resolver según el ámbito y la visibilidad. El

ámbito de un identificador es aquella región de la unidad de programa (bloque, subprograma, o paquete) desde el cual se puede referenciar el identificador. Un identificador es visible solo en la región desde que usted puede referenciar el identificador usando un nombre sin calificar. La declaración de un identificador en un bloque PL/SQL se considera local a ese bloque y global a todos los sub-bloques. Si un identificador global es re-declarado en un sub-bloque ambos identificadores permanecen al ámbito. Sin embargo, dentro del sub-bloque, solo el identificador local es visible porque usted debe usar un nombre calificado que referencie al identificador global.

Aunque usted no pueda declarar un identificador dos veces en el mismo bloque, usted puede declarar un mismo identificador en dos bloques diferentes. Los dos ítems representan un identificador distinto, y algunos cambios en uno no lo afecta al otro. Sin embargo, un bloque no puede referenciar identificadores declarados en otro bloque del mismo nivel porque aquellos ni son identificadores locales ni globales en el bloque.

Page 13: Capitulo 2

Bloques anidados y variables de entorno

El bloque anidado que se muestra en la diapositiva, en nombre de la variable y puede ser referencia de la variable de nombre x. Sin embargo, no puede referenciar la variable y fuera del ámbito de y. Si la variable y de el bloque anidado es dado el mismo nombre de la variable x en otro bloque, este valor es valido solo en la duración del bloque anidado

  Ámbito El ámbito de un identificador es la región de unidad de

programa (bloque, sub-programa o paquete) desde el cual usted puede referenciar el identificador

Visibilidad Un identificador es visible solo en la región desde la cual

fue referenciado el identificador usando un nombre sin identificar.

Page 14: Capitulo 2

Un identificador es visible en el bloque que es declarado y todos los sub-bloques anidados, procedimientos y funciones. Si el bloque no encuentra el identificador declarado local, el mira arriba de la sección declarativa del bloque encerrado. El Bloque nunca mira bajo del bloque encerrado.

El ámbito aplica todas las declaraciones de objetos, incluyendo variables, cursores, excepciones definidas por el usuario y constantes

Page 15: Capitulo 2

Cualificar un identificador usando el prefijo de etiqueta del bloque, en el ejemplo de la diapositiva, el bloque outer tiene la etiqueta outer. En el bloque interior, la variable tiene el mismo nombre, birthdate, desde el bloque outer en el bloque interno. El prefijo de la variable es el nombre del bloque, outer.birthdate

Page 16: Capitulo 2

Cualificar un identificador usando el prefijo de etiqueta del bloque, en el ejemplo de la diapositiva, el bloque outer tiene la etiqueta outer. En el bloque interior, la variable tiene el mismo nombre, birthdate, desde el bloque outer en el bloque interno. El prefijo de la variable es el nombre del bloque, outer.birthdate

Page 17: Capitulo 2

Los mismos que en SQL: lógicos, aritméticos, concatenación, paréntesis y orden de control de operaciones, operador exponencial

Orden de operaciones: Las operaciones dentro de una expresión se llevan a cabo en

un orden determinado en función de su prioridad (prioridad). La siguiente tabla muestra el orden por defecto desde la alta prioridad hasta la baja prioridad:

Operador Operación** Exponencial+, - Identidad, negación*, / Multiplicación, división+, - , || Adición, substracción, concatenación=, <, >, <=, >=, <>, !=, IS NULL, LIKE, BETWEEN, IN

Comparison

NOT Negación lógicaAND ConjunctionOR inclusion

Page 18: Capitulo 2

Cuando trabajamos con nulos, usted puede evitar errores comunes teniendo en cuenta las siguientes normas:

Implicar comparaciones nulas siempre da NULL

Aplicando el operador lógico NOT a un null da NULL

En sentencias condicionales de control, si la condición da null, esta secuencia asociada de sentencias no son ejecutadas

Page 19: Capitulo 2

Hacer fácil el mantenimiento de código con:

• Documentar el código con comentarios• Desarrollar una convención de código• Desarrollar convenciones de nombres para

identificar otros objetos• Mejorar la legibilidad con sangrías

Page 20: Capitulo 2

Para claridad, y mejorar la legibilidad, se debe aplicar sangría a cada nivel del código, se muestra la estructura, usted puede dividir líneas con sangría usando espacios de tabulaciones.

Compare la sentencia if:

IF x>y THEN v_max:=x;ELSE v_max:=y,END IF;

IF x>y THEN v_max:=x;ELSE v_max:=y,END IF;