Índice

Tipos de Datos

SQL admite una variada gama de tipos de datos para la información almacenada en las tablas, los tipos de datos pueden ser numéricos, alfanuméricos, de fecha o booleanos. Segun el gestor de base de datos que usemos, los tipos de datos varían. En la actualidad casi todos los gestores soportan un nuevo tipo de dato. BLOB, usado para almacenar archivos, imagenes etc.



En la siguiente tabla se muestran los tipos de datos.

NuméricoAlfanuméricoFechaLógicoBLOB
————–————–———-——–——-
Integerchar(n)DateBitImage
Numeric(n,m)varchar(n,m)DateTime Text
Decimal    
Float    

Más detalladamente tenemos:

Tipos de datos numéricos
Tipo Definición Bytes
Integer Valores enteros con signo. 4
Numeric(n,m) Números reales de hasta 18 dígitos (con decimales), donde n representa el total de dígitos admitidos (normalmente denominado precisión) y m el número de posiciones decimales (escala). 5-17
Decimal(n,m) Igual que el tipo numeric. 5-17
Float Número de coma flotante, este tipo de datos se suele utilizar para los valores en notación cientifica. 4-8
Tipos de Datos alfanuméricos
char(n) Almacena de 1 a 255 caracteres alfanuméricos. Este valor viene dado por n, y es el tamaño utilizado en disco para almacenar dato. Es decir si defino un campo como char(255), el tamaño real del campo será de 255, aunque el valor solo contenga 100. 0-255
varchar(n) Igual que el tipo char, con la salvedad que varchar almacena únicamente los bytes que contenga el valor del campo. 0-255
Tipos de datos fecha
Date Almacena fechas, con dias, mes y año. 8
Datetime Almacena la fecha y la hora. 4
Tipos de datos lógicos
Bit Almacena 0 o no cero, según la base de datos serán 1 o -1. 0 es falso y 1 verdadero. 1 bit
Tipos de datos BLOB
image Almacena imágenes en formato binario, hasta 2Gb 0-2Gb
Text Almacena texto en formato binario, hasta 2Gb 0-2Gb

Nota: El tamaño del campo varía en función de cada base de datos, 255 es el valor estándar. Realmente el tamaño viene delimitado por el tamaño de las páginas de datos, para SQL server el límite está en 8000 bytes (8000 carácteres), siempre que el tamaño de página sea de 8Kb

Tipos de datos en ORACLE

-- NUMBER [(precisión, escala)]
saldo NUMBER(16,2);
/*Indica que puede almacenar un valor numérico de 16 dígitos, 2 de ellas decimales. Es decir, 14 enteros y dos decimales o 16 enteros*/

La precisión indica el número de dígitos (contanto los decimales) que contendrá el número como máximo. La escala indica el máximo de dígitos decimales. Si declaramos un NUMBER(10,5), podrá contener como máximo cualquier número siempre y cuando el número de dígitos enteros más el número de dígitos decimales no supere 10 (y no 15).

Se puede especificar una escala negativa para redondear el número a las posiciones indicadas en la escala. Por ejemplo, NUMBER(5,-2) redondea a las centenas, por lo que si introducimos 1355, se almacenará 1400.

‐‐ VARCHAR2 (longitud_maxima)
nombre VARCHAR2(20);
/* Indica que puede almacenar valores alfanuméricos de hasta 20 posiciones */
/* Cuando la longitud de los datos sea menor de 20 no se rellena con blancos */
‐‐ CHAR [(longitud_maxima)] 
nombre CHAR(20);
/* Indica que puede almacenar valores alfanuméricos de 20 posiciones*/
hay_error BOOLEAN;
DECLARE
‐‐ declare record variable that represents a row fetched from the employees table 
  emp_rec employees%ROWTYPE; ‐‐ declare variable with %ROWTYPE attribute 
BEGIN
  SELECT * INTO emp_rec FROM EMPLOYEES WHERE employee_id = 120; ‐‐ retrieve record
  DBMS_OUTPUT.PUT_LINE('Employee name: ' || emp_rec.first_name || ' ' || emp_rec.last_name);
END; 

TYPE <nombre> IS RECORD
(
  campo <tipo_datos> [NULL | NOT NULL]
  [,<tipo_datos>...]
);

Los registros son un tipo de datos, se pueden declarar variables de dicho tipo de datos. (Son como los struct en C++)

DECLARE 
TYPE PAIS IS RECORD
  (
    CO_PAIS NUMBER,
    DESCRIPCION VARCHAR2(50),
    CONTINENTE VARCHAR2(20)
  );

/* Declara una variable miPAIS de tipo PAIS. Esto significa que la variable miPAIS tendrá los campos ID, DESCRIPCION y CONTINENTE. */
  miPAIS PAIS;
BEGIN 
/* Asignamos valores a los campos de la variable.*/ 
  miPAIS.CO_PAIS := 27;
  miPAIS.DESCRIPCION := 'ITALIA';
  miPAIS.CONTINENTE := 'EUROPA';
END; 

Los registros pueden estar anidados. Es decir, un campo de un registro puede ser de un tipo de dato de otro registro. Pueden asignarse todos los campos de un registro utilizando una sentencia SELECT.

SELECT CO_PAIS, DESCRIPCION, CONTINENTE INTO miPAIS FROM PAISES WHERE CO_PAIS = 27;
  1. Es similar a un array
  2. Tiene dos componentes: Un índice de tipo BINARY_INTEGER que permite acceder a los elementos en la tabla PL/SQL y una columna de escalares o registros que contiene los valores de la tabla PL/SQL
  3. Puede incrementar su tamaño dinámicamente.

La sintaxis general es la siguiente:

TYPE <nombre_tipo_tabla> IS TABLE OF
<tipo_datos> [NOT NULL]
INDEX BY BINARY_INTEGER;

Una vez definido el tipo, podemos declarar variables y asignarles valores.

DECLARE
  /* Definimos el tipo PAISES como tabla PL/SQL */
  TYPE PAISES IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
  /* Declaramos una variable del tipo PAISES */
  tPAISES PAISES;
BEGIN
  tPAISES(1) := 1;
  tPAISES(2) := 2;
  tPAISES(3) := 3;
END;

Funciones para el manejo de tablas PL/SQL

Cuando trabajamos con tablas de PL/SQL podemos utilizar las siguientes funciones:

  1. a. FIRST. Devuelve el menor índice de la tabla. NULL si está vacía.
  2. b. LAST. Devuelve el mayor índice de la tabla. NULL si está vacía.
  3. c. EXISTS(i). Utilizada para saber si en un cierto índice hay almacenado un valor. Devolverá TRUE si en el índice i hay un valor.
  4. d. COUNT. Devuelve el número de elementos de la tabla PL/SQL.
  5. e. PRIOR (n). Devuelve el número del índice anterior a n en la tabla.
  6. f. NEXT (n). Devuelve el número del índice posterior a n en la tabla.
  7. g. TRIM. Borra un elemento del final de la tabla PL/SQL.
  8. h. TRIM(n) borra n elementos del final de la tabla PL/SQL.
  9. i. DELETE. Borra todos los elementos de la tabla PL/SQL.
  10. j. DELETE(n) borra el correspondiente al índice n.
  11. k. DELETE(m,n) borra los elementos entre m y n.
DECLARE
TYPE ARR_CIUDADES IS TABLE OF VARCHAR2(50) INDEX BY BINARY_INTEGER;
misCiudades ARR_CIUDADES;
BEGIN 
misCiudades(1) := 'MADRID';
misCiudades(2) := 'BILBAO';
misCiudades(3) := 'MALAGA';
FOR i IN misCiudades.FIRST..misCiudades.LAST LOOP
dbms_output.put_line(misCiudades(i));
END LOOP;
END;

ROWID

Representa una dirección de la base de datos, ocupada por una única fila. El ROWID de una fila es un identificador único para una fila dentro de una base de datos. No hay dos filas con el mismo ROWID. Este tipo de dato sirve para guardar punteros a filas concretas.

Operadores

Los operadores se pueden definir como combinaciones de caracteres que se utilizan tanto para realizar asignaciones como comparaciones entre datos. Se dividen en aritméticos, relacionales, lógicos y de concatenación y suelen ser los mismos para todos los SGBD.

Operadores SQL
Aritmeticos + Suma
- Resta
* Producto
/ División
** ^ Exponenciación
Relacionales < Menor que
<= Menor o igual que
> Mayor que
>= Mayor o igual que
!= Distinto
!< No menor que
!> No mayor que
Lógicos AND Los operadores lógicos permiten comparar expresiones lógicas devolviendo siempre un valor verdadero o falso. Los operadores lógicos se evalúan de izquierda a derecha.
OR
NOT
Concatenación +, || Se emplea para unir datos de tipo alfanumérico. + se emplea en Microsoft SQLSERVER y || en ORACLE.

Operadores en ORACLE

Los más comunes son:

Palabras clave

SQL dispone de muy pocas órdenes, pero de múltiples palabras clave, lo que le convierten en un lenguaje sencillo pero tremendamente potente para llevar a cabo su función.

ALLANDANYASC
AVGBEGINBYCHAR
CHECKCLOSECOUNTCOMMIT
CREATECURSORDECIMALDECLARE
DELETEDESCDISTINCTDEFAULT
EXISTSFETCHFLOATFOR
FROMGRANTGROUPHAVING
ININDEXINSERTINTEGER
INTOLIKEMAXMIN
NOTNUMERICONOPEN
ORORDERREVOKEROLLBACK
SELECTSETSUMTABLE
UNIONUNIQUEUPDATEUSER
VALUESVIEWWHEREWITH

Funciones Agregadas

Proporcionan a SQL utilidades de cálculo sobre los datos de las tablas. Estas funciones se incorporan en las consultas SELECT y retornan un único valor al operar sobre un grupo de registros.

FUNCIONDescripción
—————————————————————-
MAX()Devuelve el valor máximo
MIN()Devuelve el valor mínimo
SUM()Devuelve el valor de la suma de los valores del campo
COUNT()Devuelve el número de filas que cumplen la condición
AVG()Devuelve el promedio de los valores del campo

Predicados

Condiciones que se indican en clausula WHERE de una consulta SQL. La siguiente tabla ilustra los predicados de SQL.

COMANDODescripción
BETWEEN…ANDComprueba que el valor esta dentro de un intervalo
LIKECompara un campo con una cadena alfanumérica. LIKE admite el uso de caracteres comodines
ALLSeñala a todos los elementos de la selección de la consulta
ANYIndica que la condición se cumplirá si la comparación es cierta para al menos un elemento del conjunto.
EXISTSDevuelve un valor verdadero si el resultado de una subconsulta devuelve resultados.
INComprueba si un campo se encuentra dentro de un determinado rango. El rango puede ser una sentencia SELECT.

Bibliografia: www.devjoker.com

Siguiente tema: Lenguaje Definición de Datos(DDL) - CREATE.