miércoles, 10 de diciembre de 2014

Como Se Puede Crear Una Tabla Con Un Máximo De Una Fila

Probé este ejemplo en Oracle 12.1. Si quieres crear una tabla que no tendrá nunca más de una fila, se puede hacerlo de la manera siguiente:
 
SQL> create table tab1(col1 number)
  2  /
 
Tabla creada.
 
SQL> create unique index ind1 on tab1(1)
  2  /
 
Índice creado.
 
SQL> insert into tab1 values(1)
  2  /
 
1 fila creada.
 
SQL> insert into tab1 values(2)
  2  /
insert into tab1 values(2)
*
ERROR en línea 1:
ORA-00001: restricción única (SYS.IND1) violada
 
SQL> select * from tab1
  2  /
 
      COL1
----------
         1 

SQL>

jueves, 20 de noviembre de 2014

¿Porqué Tuve Que Borrar Esta Tabla Dos Veces?

Hallé este ejemplo en un sitio inglés y decidí traducirlo para los hispanohablantes. Lo he probado en Oracle 9.2 y Oracle 11.2 lo que quiere decir que la versión no sea demasiado importante. Un usuario que se llama Fred se conecta a una base de datos: 

SQL> conn fred/bloggs
Connected.
SQL>

Tiene solamente una sesión y no hay nadie más en la base de datos:

SQL> select username from v$session
  2  where username is not null
  3  /
 
USERNAME
------------------------------
FRED

SQL>

... y su usuario es vacio:

SQL> select count(*) from user_objects
  2  /
 
  COUNT(*)
----------
         0
 
SQL>

Fred crea una tabla, ejecuta unos comandos de SQL y intenta a borrar la tabla. Cuando lo hace por primera vez, ve dos errores que no te he mostrado:

SQL> drop table tab1
  2  /
drop table tab1
*
ERROR at line 1:
ORA-?????
ORA-?????
 
SQL>

Cuando lo hace por segunda vez, no hay problemas:

SQL> drop table tab1
  2  /
 
Table dropped.
 
SQL>

Yo necesito saber:
  1.  ¿Cómo fue creada la tabla?
  2. ¿Cuáles fueron los comandos de SQL?
  3. ¿Cuáles errores ha visto Fred?
Si sabes las respuestas puedes ponerlas en un comentario bajo estas líneas.