Jun 16
Acabo de leer en Oracle Notepad un artículo muy interesante sobre la ordenación de resultados en castellano. Nunca pensé que la ordenación sería así. Supongo que porque en todas las bases de datos Oracle con las que he trabajado tenían el parámetro NLS_SORT fijado en español.
Para comprobar con qué ordenación por defecto está configurada nuestra base de datos basta con hacer una select de la tabla NLS_PARAMETER:
SQL> SELECT * FROM NLS_DATABASE_PARAMETERS;
PARAMETER VALUE
------------------------------ ----------------------------------------
NLS_CSMIG_SCHEMA_VERSION 5
NLS_LANGUAGE SPANISH
NLS_TERRITORY SPAIN
NLS_CURRENCY ?
NLS_ISO_CURRENCY SPAIN
NLS_NUMERIC_CHARACTERS ,.
NLS_CHARACTERSET WE8ISO8859P15
NLS_CALENDAR GREGORIAN
NLS_DATE_FORMAT DD/MM/RR
NLS_DATE_LANGUAGE SPANISH
NLS_SORT SPANISH
NLS_TIME_FORMAT HH24:MI:SSXFF
NLS_TIMESTAMP_FORMAT DD/MM/RR HH24:MI:SSXFF
NLS_TIME_TZ_FORMAT HH24:MI:SSXFF TZR
NLS_TIMESTAMP_TZ_FORMAT DD/MM/RR HH24:MI:SSXFF TZR
NLS_DUAL_CURRENCY ?
NLS_COMP BINARY
NLS_LENGTH_SEMANTICS BYTE
NLS_NCHAR_CHARACTERSET AL16UTF16
NLS_NCHAR_CONV_EXCP FALSE
NLS_RDBMS_VERSION 10.2.0.4.0
Jan 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 »
Aug 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 26
Uniendo el script que obtiene las tablas que apuntan a una con la utilidad del todopoderoso paquete DMBS_METADATA me he hecho otro script que me obtiene el ddl de las claves foráneas que apuntan a una tabla determinada. Continue reading »
Jul 25
Este es un script para obtener un listado con las claves foráneas que apuntan a la tabla que le pasan como parámetro. Es útil si tenemos la buena costumbre de nombrar las claves con algún sufijo o prefijo que nos indiquen el tipo. Si no, sería necesario agregar más columnas a la select. Continue reading »
Jul 24
Otra función interesante del paquete DBMS_METADATA es get_Granted_DDL. Tal como su nombre sugiere, te devuelve el código ddl de los permisos que tenga el usuario que le pasas como parámetro. Continue reading »
Jul 21
He introducido una mejora en el script que utilizo para describir tablas en el plus. En principio, tal como dije, me describe tablas del esquema en el que estoy. Esto lo hice así porque paso de estar todo el rato metiendo el nombre del usuario cuando, el 99,99% de los desc que hago son siempre de tablas o vistas del usuario con el que estoy conectado. Bueno, lo que he hecho es que el script se de cuenta de si lo que he escrito es un sinónimo. Continue reading »
Jul 20
Cuando creo una vista, me gusta ponerle comentarios a ella y también a sus columnas. Normalmente es un rollo porque tengo que copy-pastearme las columnas y luego ir haciendo el comment on column. Lo peor del copy-paste es que es muy fácil cometer errores inadvertidamente (y cambiarle los comentarios a otra tabla o cosas por el estilo). Por esto y por gandulería informática, me he hecho un script para ahorrame trabajo y errores. Continue reading »
Jul 09
Me he visto obligado a sustituir algunas tablas de un esquema por vistas sobre otro. La idea es hacer una refactorización, por lo que necesito asegurarme de que las nuevas vistas tengan las mismas columnas que las antiguas tablas. Continue reading »
Jul 05
Estaba navegando por estos mundos de Oracle buscando algún consejo sobre la forma más eficiente de montar una union y me he topado con este interesante documento sobre tips de sql. Creo que todos los que trabajamos con consultas SQL en Oracle deberíamos conocerlos: SQL Tuning Tips.
Especialmente curioso me ha parecido el primero de ellos que viene a aconsejar seguir algún tipo de patron a la hora de construir las consultas. Es algo que me gusta hacer, pero nunca hubiera pensado que pudiera respaldarlo con argumentos tuneros.