Buen día comunidad
Estudiando un poco el tema de transacciones sobre oracle y haciendo algunas pruebas, me he encontrado con algunas cosas de las cuales me gustaría saber la teoría y el funcionamiento interno que hace oracle en estos aspectos.
Código SQL:
Ver originalSQL> CREATE TABLE prueba(num NUMBER);
Tabla creada.
SQL> INSERT INTO prueba VALUES(1);
1 fila creada.
SQL> INSERT INTO prueba VALUES(2);
1 fila creada.
SQL> ALTER TABLE prueba ADD num2 NUMBER;
Tabla modificada.
SQL> ROLLBACK;
ROLLBACK terminado.
SQL> SELECT *FROM prueba;
NUM NUM2
---------- ----------
1
2
De esto se deduce, que una sentencia DDL hace un commit implicito de la transacción y la finaliza, ya que al hacer rollback, los registros fueron previamente confirmados por la sentencia DDL.
Mi segunda prueba, fue la que me trajo interrogantes.
Código SQL:
Ver originalSQL> INSERT INTO prueba (num) VALUES(3);
1 fila creada.
SQL> SELECT *FROM prueba;
NUM NUM2
---------- ----------
1
2
3
SQL> ALTER TABLE prueba ADD num3 NUMBERS;
ALTER TABLE prueba ADD num3 NUMBERS
*
ERROR en línea 1:
ORA-00902: tipo de dato no válido
SQL> ROLLBACK;
ROLLBACK terminado.
SQL> SELECT *FROM prueba;
NUM NUM2
---------- ----------
1
2
3
Ejecuto una sentencia DDL con un error (tipo de dato NUMBERS) y efectivamente me muestra el error. Pero al hacer rollback, me doy cuenta que aunque fue una sentencia DDL fallida, me ha ejecutado el commit implicito.

:
En una tercera prueba hago esto:
Código SQL:
Ver originalSQL> INSERT INTO prueba (num) VALUES(4);
1 fila creada.
SQL> SELECT *FROM prueba;
NUM NUM2
---------- ----------
1
2
3
4
SQL> ALTER TABLE prueba DROP num2;
ALTER TABLE prueba DROP num2
*
ERROR en línea 1:
ORA-00905: falta una palabra clave
SQL> ROLLBACK;
ROLLBACK terminado.
SQL> SELECT *FROM prueba;
NUM NUM2
---------- ----------
1
2
3
En este caso, aunque mandé una sentencia DDL errornea (Por un error de sintaxis), al hacer ROLLBACK si me deja deshacer los cambios.
En ultimas mi pregunta es:
Cual es la secuencia que realiza ORACLE al ejecutar sentencias DDL dentro de una transacción en curso?
Muchas gracias por su atención