lunes, 21 de septiembre de 2009

Excepciones en PL/SQL

EXCEPCIONES EN PL/SQL

MANEJO DE EXCEPCIONES

En PL/SQL una advertencia o condición de error es llamada una excepción. Las excepciones se controlan dentro de su propio bloque. La estructura de bloque de una excepción se muestra a continuación.

DECLARE
-- Declaraciones
BEGIN
-- Ejecución
EXCEPTION
-- Excepción
END;

Cuando ocurre un error, se ejecuta la porción del programa marcada por el bloque EXCEPTION, transfiriéndose el control a ese bloque de sentencias.

El siguiente ejemplo muestra un bloque de excepciones que captura las excepciones NO_DATA_FOUND y ZERO_DIVIDE. Cualquier otra excepción será capturada en el bloque WHEN OTHERS THEN.

DECLARE

-- Declaraciones
BEGIN
-- Ejecución
EXCEPTION
WHEN
NO_DATA_FOUND THEN

-- Se ejecuta cuando ocurre una excepción de tipo NO_DATA_FOUND
WHEN ZERO_DIVIDE THEN
-- Se ejecuta cuando ocurre una excepción de tipo ZERO_DIVIDE

WHEN OTHERS THEN
-- Se ejecuta cuando ocurre una excepción de un tipo no tratado
-- en los bloques anteriores


END;

Cuando ocurre un error, se ejecuta el bloque EXCEPTION, transfiriéndose el control a las sentencias del bloque. una vez finalizada la ejecución del bloque de EXCEPTION no se continua ejecutando el bloque anterior.

Si existe un bloque de excepciones apropiado para el tipo de excepción se ejecuta dicho bloque. Si no existe un bloque de control de excepciones adecuado al tipo de excepción se ejecutara el bloque de excepción WHEN OTHERS THEN (si existe). WHEN OTHERS debe ser el último manejador de excepciones.

Las excepciones pueden ser definidas de manera interna o explícitamente por el usuario. Ejemplos de excepciones definidas de forma interna son la división por cero y la falta de memoria en tiempo de ejecución. Estas mismas condiciones excepcionales tienen tiene sus propios tipos y pueden ser referenciadas por ellos: ZERO_DIVIDE y STORAGE_ERROR

Las excepciones definidas por el usuario deben ser alcanzadas explícitamente utilizando la sentencia RAISE.

Con las excepciones se pueden manejar los errores cómodamente sin necesidad de mantener múltiples chequeos por cada sentencia escrita. También provee claridad en el código ya que permite mantener las rutinas correspondientes al tratamiento de los errores de forma separada de la lógica del negocio.

EXCEPCIONES PREDEFINIDAS

No necesitan ser declaradas. Simplemente se utilizan cuando estas son lanzadas por algún error determinado


DUP_VAL_ON_INDEX: Se produce cuando se intenta almacenar un valor ya existente en una columna que tiene restricción de índice único.

TIMEOUT_ON_RESOURCE: Se excedió el tiempo máximo de espera por un recurso en Oracle.

NOT_LOGGED_ON: El programa efectuó una llamada a Oracle sin estar conectado.

LOGIN_DENIED: El login o la contraseña utilizados para entrar en Oracle son inválidos.

NO_DATA_FOUND: Una sentencia SELECT INTO no devolvió ningún registro.

TOO_MANY_ROWS: Una sentencia SELECT INTO devolvió más de un registro.

ZERO_DIVIDE: Se ha ejecutado una división donde el divisor valía cero.

STORAGE_ERROR: Si no se dispone de más memoria o la memoria esta dañada.

PROGRAM_ERROR: Ocurrió un problema interno al ejecutar el código PL/SQL.

INVALID_NUMBER: Cuando falla la conversión de una cadena de caracteres hacia un número porque la cadena no representa un número válido.

VALUE_ERROR: Ocurrió un error aritmético, de conversión o truncamiento. Por ejemplo, esto sucede cuando se intenta dar un valor muy grande a una variable que no soporta dicho tamaño.

ROWTYPE_MISMATCH: Los elementos de una asignación (el valor a asignar y la variable que lo contendrá) son de tipos incompatibles. También se presenta este error cuando un parámetro pasado a un subprograma no es del tipo esperado.

SYS_INVALID_ROWID: Falla la conversión de una cadena de caracteres hacia un tipo rowid porque la cadena no representa un número.

INVALID_CURSOR: Se efectuó una operación no válida sobre un cursor. Suele ocurrir cuando un cursor no está abierto y se ejecuta una sentencia para cerrar dicho cursor.

CURSOR_ALREADY_OPEN: Cuando se intenta abrir un cursor que ya estaba abierto. Hay que recordar que un cursor de tipo FOR se abre automáticamente por lo que no se debe ejecutar la sentencia OPEN.

ACCESS_INTO_NULL: Se intentó asignar un valor a los atributos de un objeto no inicializado.

COLLECTION_IS_NULL: Se intentó asignar un valor a una tabla anidada aún no inicializada.

SELF_IS_NULL: El parámetro SELF (el primero que es pasado a un método MEMBER) es nulo.

SUBSCRIPT_BEYOND_COUNT: El programa está tratando de referenciar un elemento de un arreglo indexado que se encuentra en una posición más grande que el número real de elementos de la colección

SUBSCRIPT_OUTSIDE_LIMIT: El programa está referenciando un elemento de un arreglo utilizando un número fuera del rango permitido (por ejemplo, el elemento “-1”)

OTHERS: Cualquier otro tipo de error que pueda producirse. Cuando se utiliza la excepción OTHERS, cualquier excepción que no se haya tratado anteriormente se procesará según la secuencia de instrucciones incluida dentro de la sección OTHERS. OTHERS debe ser la última excepción tratada dentro de la sección dedicada al tratamiento de excepciones.

EXCEPCIONES DEFINIDAS POR EL USUARIO

Son las que permiten al usuario definir sus propias excepciones, las que deberán ser declaradas y lanzadas explícitamente utilizando la sentencia RAISE.

Las excepciones deben ser declaradas en el segmento DECLARE de un bloque, subprograma o paquete. Se declara una excepción como cualquier otra variable, asignándole el tipo EXCEPTION. Las mismas reglas de alcance aplican tanto sobre variables como sobre las excepciones.

DECLARE
-- Declaraciones

MyExcepcion EXCEPTION;
BEGIN
-- Ejecucion
EXCEPTION
-- Excepcion
END;

SENTENCIA RAISE

La sentencia RAISE permite lanzar una excepción en forma explícita. Es posible utilizar esta sentencia en cualquier lugar que se encuentre dentro del alcance de la excepción.


DECLARE
-- Declaramos una excepcion identificada por VALOR_NEGATIVO

VALOR_NEGATIVO EXCEPTION;

valor NUMBER;
BEGIN
-- Ejecucion

valor := -1;

IF valor <> THEN

RAISE VALOR_NEGATIVO;

END IF;


EXCEPTION
-- Excepcion

WHEN VALOR_NEGATIVO THEN

dbms_output.put_line('El valor no puede ser negativo');
END;

Con la sentencia RAISE podemos lanzar una excepción definida por el usuario o predefinida, siendo el comportamiento habitual lanzar excepciones definidas por el usuario.

martes, 1 de septiembre de 2009

LENGUAJE SQL


Es un lenguaje de base de datos normalizado, utilizado por los diferentes motores de bases de datos para realizar determinadas operaciones sobre los datos o sobre la estructura de los mismo. pero como sucede con cualquier sistema de normalizacion hay excepciones pàra casi todo; de hecho, cada motor de base de datos tiene sus peculiridades y lo hace diferente de otro motor, por lo tanto, el lenguaje SQL normalizado (ANSI) sera interpretable por cualquier motor de datos.


HISTORIA

La historia de SQL (que se pronuncia deletreando en inglés las letras que lo componen, es decir "ese-cu-ele" y no "siquel" como se oye a menudo) empieza en 1974 con la definición, por parte de Donald Chamberlin y de otras personas que trabajaban en los laboratorios de investigación de IBM, de un lenguaje para la especificación de las características de las bases de datos que adoptaban el modelo relacional. Este lenguaje se llamaba SEQUEL (Structured English Query Language) y se implementó en un prototipo llamado SEQUEL-XRM entre 1974 y 1975. Las experimentaciones con ese prototipo condujeron, entre 1976 y 1977, a una revisión del lenguaje (SEQUEL/2), que a partir de ese momento cambió de nombre por motivos legales, convirtiéndose en SQL. El prototipo (System R), basado en este lenguaje, se adoptó y utilizó internamente en IBM y lo adoptaron algunos de sus clientes elegidos. Gracias al éxito de este sistema, que no estaba todavía comercializado, también otras compañías empezaron a desarrollar sus productos relacionales basados en SQL. A partir de 1981, IBM comenzó a entregar sus productos relacionales y en 1983 empezó a vender DB2. En el curso de los años ochenta, numerosas compañías (por ejemplo Oracle y Sybase, sólo por citar algunos) comercializaron productos basados en SQL, que se convierte en el estándar industrial de hecho por lo que respecta a las bases de datos relacionales.

En 1986, el ANSI adoptó SQL (sustancialmente adoptó el dialecto SQL de IBM) como estándar para los lenguajes relacionales y en 1987 se transfomó en estándar ISO. Esta versión del estándar va con el nombre de SQL/86. En los años siguientes, éste ha sufrido diversas revisiones que han conducido primero a la versión SQL/89 y, posteriormente, a la actual SQL/92.

El hecho de tener un estándar definido por un lenguaje para bases de datos relacionales abre potencialmente el camino a la intercomunicabilidad entre todos los productos que se basan en él. Desde el punto de vista práctico, por desgracia las cosas fueron de otro modo. Efectivamente, en general cada productor adopta e implementa en la propia base de datos sólo el corazón del lenguaje SQL (el así llamado Entry level o al máximo el Intermediate level), extendiéndolo de manera individual según la propia visión que cada cual tenga del mundo de las bases de datos.

Actualmente, está en marcha un proceso de revisión del lenguaje por parte de los comités ANSI e ISO, que debería terminar en la definición de lo que en este momento se conoce como SQL3. Las características principales de esta nueva encarnación de SQL deberían ser su transformación en un lenguaje stand-alone (mientras ahora se usa como lenguaje hospedado en otros lenguajes) y la introducción de nuevos tipos de datos más complejos que permitan, por ejemplo, el tratamiento de datos multimediales.

CARACTERISTICAS

El SQL es un lenguaje de acceso a bases de datos que explota la flexibilidad y potencia de los sistemas relacionales permitiendo gran variedad de operaciones en éstos últimos.

Es un lenguaje declarativo de "alto nivel" o "de no procedimiento", que gracias a su fuerte base teórica y su orientación al manejo de conjuntos de registros , y no a registros individuales, permite una alta productividad en codificación y la orientación a objetos. De esta forma una sola sentencia puede equivaler a uno o más programas que utilizas en un lenguaje de bajo nivel orientado a registro.



VERSIONES

SQL Server 7
SQL Server 2000
SQL Server 2005
Enterprise Edition Enterprise Edition Enterprise Edition
Standard Edition Standard Edition Standard Edition
. WorkGroup Edition WorkGroup Edition
Desktop Edition Personal Edition .
MSDE (Microsoft Developer Edition) Developer Edition Developer Edition
MSDE (Microsoft Desktop Engine) MSDE (Microsoft Desktop Engine) Express Edition

CE Edition Mobile Edition
      • En la versión 7, había confusiones entre la versión Developer y Desktop Engine,
        ya que se utilizaban las mismas siglas (MSDE) en algunas ocasiones. También
        se confundían Desktop Engine y Desktop Edition por la similitud de nombres.
      • Desktop Edition de SQL Server 7, ha pasado a llamarse Personal Edition en SQL
        Server 2000.
      • Workgroup edtion ha aparecido en el año 2005, tanto para SQL Server 2000 como 2005.
      • SQL Server 2005 no dispone de Personal Etidion

Relación de versiones y sistemas operativos sobre los que se pueden instalar:


  • Enterprise
  • Standard
  • WorkGroup
  • Enterprise
    Evaluation

Windows NT Server 4.0 (SP5 o posterior)
Windows NT Server 4.0 Enterprise Edition (SP5 o posterior)
Windows 2000 Server, Advanced Server o Datacenter Server

Windows Server 2003 (todas las versiones)

SQL Server 2005 standard y Workgroup soportan además:
Windows 2000 Professional, Windows XP Professional

  • Personal / Desktop
  • Developer
  • MSDE
  • Express

Windows NT Server 4.0 (SP5 o posterior)
Windows NT Server 4.0 Enterprise Edition (SP5 o posterior)
Windows 2000 Server, Advanced Server o Datacenter Server
Microsoft Windows 9x, Windows ME, Windows XP Home
Windows NT Workstation 4.0 (SP5 o posterior)
Windows 2000 Professional, Windows XP Professional


INSTRUCCIONES Y EJEMPLOS

Aqui les mostraremos algunas instrucciones basicas que maneja sql

Create

Este comando crea un objeto dentro de la base de datos puede ser una tabla, vita, indice o trigger,funcion,procedimiento o cualquier otro objeto que el motor de base de datos soporte


Ejemplo (creacion de una tabla)


CREATE TABLE 'TABLA_NOMBRE' (
'CAMPO_1' INT,
'CAMPO_2' STRING
)
CREATE TABLE 'TABLA_NOMBRE' (
'CAMPO_1' DOCUMENTO,
'CAMPO_2' APELLIDO-NOMBRE-EDAD


Alter

Este comando permite modificar la estructura de un objeto. Se pueden agregar/quitar campos a una tabla, modificar el tipo de un campo, agregar/quitar índices a una tabla, modificar un trigger, etc.

Ejemplo (agregar columna a unatabla)

ALTER TABLE 'TABLA_NOMBRE' (
ADD NUEVO_CAMPO INT UNSIGNED
)


Drop

Este comando elimina un objeto de la base de datos. Puede ser una tabla, vista, indice,
trigger,función, procedimiento o cualquier otro objeto que el motor de la base de datos soporte.
Se puede combinar con la sentencia ALTER.

Ejemplos

ALTER TABLE ''TABLA_NOMBRE''
(
DROP COLUMN ''CAMPO_NOMBRE1''
)

ANALISIS DE SISTEMA



DEFINICION DE SISTEMA

Un sistema es un conjunto de partes o elementos organizadas y relacionadas que interactúan entre sí para lograr un objetivo. Los sistemas reciben (entrada) datos, energía o materia del ambiente y proveen (salida) información, energía o materia.

Un sistema puede ser físico o concreto (una computadora, un televisor, un humano) o puede ser abstracto o conceptual (un software)


Trata basicamente de determinar los objetivos y limites del sistema objeto de analisis , caracterizar su estructura y su funcionamiento, marcar las directrices que permitan alcanzar los objetivos propuestos y evaluar sus consecuencias. Tambien es un conjunto o arreglo de elementos para realizar un objetivo predefinido en el procesamiento de la informaciòn. Esto se lleva a cabo teniendo en cuenta ciertos principios:


  • Debe presentarse y entederse el dominio de la informacion de un problema
  • Defina las funciones que debe realizar el software
  • Represente el comportamiento del software a consecuencias de acontecimientos externos
  • Divida en forma jerarquica lños modelos que representan la informacion , funciones y comportamientos .
Dependiendo de los objetivos del analisis, podemos encontrarnos ante dos problematicas distintas:


  1. Analisis de un sistema ya existente para comprender, mejorar, ajustar y/o predecir su comportamiento
  2. Analisis como paso previo al diseño de un nuevo sistem- producto