ene 25
Muchas veces he necesitado crear una vista para sustituir una antigua tabla. En ocasiones he tenido que mantener en la vista una columna que ya no existe pero que debo dejar por algún motivo. Lo que hago es definir la columna como “Función(NULL) AS NOMBRE_COLUMNA”. Si es VARCHAR2 pongo directamente NULL. Si quiero que sea un number TO_NUMBER(NULL) y si es una fecha TO_DATE(NULL). Por ejemplo:
1
2
3
4
5
6
| CREATE OR REPLACE VIEW CAMPOS_NULOS AS(
SELECT NULL AS CADENA_VACIA,
TO_NUMBER( NULL ) AS NUMERO_VACIO,
TO_DATE( NULL ) AS FECHA_VACIA
FROM DUAL )
/ |
Si hacemos un desc:
SQL> DESC CAMPOS_NULOS
Nombre ¿Nulo? Tipo
------------- -------- ----------------------------
CADENA_VACIA VARCHAR2
NUMERO_VACIO NUMBER
FECHA_VACIA DATE
El único problema, como puede verse en el ejemplo, es que perdía la precisión. Continue reading »
ago 25
Cuando sabemos que dados unos parámetros una función devolverá siempre lo mismo deberíamos utilizar la expresión DETERMINISTC. Este hint le va a permitir al optimizador de Oracle evitar hacer llamadas redundantes a la función. Sólo se puede garantizar que una función devolverá lo mismo dados unos parámetros cuando no dependa de variables de sesión (como sysdate) y otros objetos de la base de datos (llamadas a funciones no deterministic o consultas). El caso más simple y más común es una función que devuelva el valor de una constante. También son comunes funciones de operaciones aritméticas o de concatenación.
Continue reading »
ago 24
Muchas veces necesito saber qué registros de una tabla tienen valores no numéricos en un campo varchar. Normalmente me hago una función en un paquete y la utilizo en la select que toque:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| FUNCTION esCadenaNumerica( vCadena VARCHAR2 ) RETURN VARCHAR2 IS
------------
-- Variables
------------
nTonta NUMBER;
BEGIN
nTonta := TO_NUMBER( vCadena );
-- Si llego hasta aquí es que el número es válido.
RETURN 'TRUE';
EXCEPTION
WHEN VALUE_ERROR THEN
-- El número no es válido.
RETURN 'FALSE';
END; |
Continue reading »
jul 22
Nunca he llegado a memorizar la manera de hacer un TO_NUMBER cuando es necesario pasarle un formato. Sólo suelo tener que hacerlo cuando estoy parseando datos de alguna manera. Una carga de loader o algo así. El caso es que siempre pierdo un tiempo precioso buscando la documentación. Por si a alguien le pasa lo mismo, aquí está el enlace: Syntax – TO_NUMBER.
may 09
Una de las cosas que suelo necesitar ver de una tabla es, a parte de sus comentarios, las tablas a donde apuntan sus claves foráneas. Y también cual es la clave primaria. Este script permite ver todo eso. Usa vistas user_, pero es fácilmente modificable para utilizar vistas all_. Habrá que pedir entonces también como parámetro el propietario del objeto.
Como veréis, a la izquierda de la clave primaria aparece un asterisco. Después de la lista de columnas hay una sección para las claves foráneas donde se detalla la tabla a la que hace referencia y las columnas de la tabla que estamos describiendo que están involucradas en la clave ajena.
Continue reading »