La esperanza es el peor de los males, pues prolonga el tormento del hombre
F. Nietzsche

Drop all tables from an schema in Oracle

I’ve found a nice solution for dropping all the tables from an existing schema in Oracle, described in this question at stackoverflow. The following script :

SELECT 'drop table '||TABLE_NAME||' cascade constraints;' FROM user_tables;

will display the sentences required for dropping all the tables in the current schema.

Variables en procedimientos de SQL (sentencias DECLARE, SET)

Se puede ampliar la información al respecto en IBM.

– declarar variables

declare @id numeric(19,0)

 

– para asignar valores a vabiables

set @id=1

select @id=max (id)+1 from permisos

 

 

Insertar varios registros con 1 sentencia Insert

Queremos añadir a una tabla que relaciona alumnos con profesores toda una clase nueva en la que los alumnos cuyo apellidos empiezan por A con el profesor con el id 9.

Debemos utilizar una sentencia insert para cada alumno ? o una para todos ?

Mejor lo último no ;)

insert into relAlumnosProfesores

select

id, 9

from

alumnos

where

apellido1 like ‘%A’

Trabajar con fechas en SQL

Cuando trabajemos con fechas en SQL siempre debemos de especificar el formato de la misma para que no haya problemas a la hora de convertirla para operar.

Por ello,el siguiente código está maaaaal (aunque puede llegar a funcionar) :

SELECT *

  FROM usuarios

 WHERE fecha_Alta >= TO_DATE ('01/12/2008')

 

Y el siguiente código está bieeeeeen :

SELECT *

  FROM usuarios

 WHERE fecha_Alta >= TO_DATE ('01/12/2008', 'dd/mm/yyyy')

 

Formatear los datos en SQL

El formato de los datos de entrada puede provocar fallos al ejecutar la sentencia SQL. Por ejemplo 

SELECT * FROM MOVIES WHERE TITLE='McHale's Navy'

El apóstrofo de McHale's hace que la sentencia SQL provoque un error al intentar ejecutarla, ya que se interpretará como cierre de comillas.

La solución, utilizando Hibernate o iBATIS no tendremos estos problemas. Tampoco si utilizamos PreparedStatement. Pero en ocasiones (desgraciadamente) debemos construir la sentencia dinámicamente. En cuyo caso podemos utilizar el método estático escapeSql de la clase StringEscapeUtils, incluido en la librería common-lang.jar que podemos encontrar en el sitio web de apache. Un ejemplo de uso:

statement.executeQuery("SELECT * FROM MOVIES WHERE TITLE='" +StringEscapeUtils.escapeSql("McHale's Navy") + "'");

Gracias a Carlos por la ayuda tan rápida sobre el tema.

Comenta