ocultar campos de la BBDD que no salgan en los informes

i.azkue
09 de Marzo del 2006
Tenemos una tabla en la que queremos quitar un campo, pero si quitamos ese campo hay que tocar mucho código. Quería saber si se puede ocultar un campo de una base datos (oracle10g) para cuando se saquen los informes no salgan estos campos.

Graciasssssssss

chemian
09 de Marzo del 2006
lo que puedes hacer, si no quieres borrar la columna es inutilizarla,

ALTER TABLE TABLA1 SET UNUSED COLUMN COLUMNA1 CASCADE CONSTRAINTS;

Esto te permita mantener la columna, pero para oracle es como si no formara parte de la tabla, es decir, que cuado consultas la tabla no se ven sus datos. incluso, podrias agregar una columna con el mismo nombre que una columna no utilizada.
Si despues te interesa borrar la coluna, solo tienes que hacer,

ALTER TABLE TABLA1 DROP UNUSED COLUMNS;

Espero que te sirva.

Jor-El
09 de Marzo del 2006
Muy interesante chemian, no sabia esa historia.

Un pregunta, ¿ se puede hacer al reves ? quiero decir que una columna que la has puesto en UNUSUED ponerla de nuevo en estado normal


chemian
09 de Marzo del 2006
Yo no he visto en ningun lado la forma de hacerlo, y tampoco he probado lo que dice a (que no dudo que funcione) ni lo probaria por el riesgo que supone, salvo que no me quedase otra.
Para lo que realmente se suele aplicar esto es en caso de que tengas que borrar varios campos de una tabla. Es decir, si quieres borrar 2 o mas campos de la forma tradicional, lo haras de uno en uno, y cada vez que se hace esto, se actualizan las filas de la tabla, por lo que si borras 3 campos, se actualizan 3 veces las filas de la tabla con el coste que eso supone, siempre teniendo en cuenta que sean grandes tablas. Utilizando este metodo, pones todos los campos que quieras borrar primero a unused, lo cual no tiene ningun coste, y cuando creas mas oportuno, es decir, cuando la BBDD este tranquilita sin carga, pues lanzas el DROP. Como las filas ya estaban unused, sabes que nadie las esta utilizando, y ademas, las filas de la tabla solo se actualizaran 1 vez.

Espero haberme explicado bien.

Saludos

a
09 de Marzo del 2006
también puedes indicar un rango (de la primera a la 10000) para ir haciendo el drop y luego un continue (10001 a la 20000) etc....

a
09 de Marzo del 2006
se puede hacer, pero no lo soporta oracle.....

a
09 de Marzo del 2006
quiero decir que oracle dice que no se puede volver a su anterior estado, pero modificando algunas filas en su diccionario se puede...... con el riesgo de dejar que te den soporte si te pasa algo, claro

Jor-El
09 de Marzo del 2006
Entiendo........

Muchas gracias

Jor-El
09 de Marzo del 2006
Entiendo........

Muchas gracias

i.azkue
09 de Marzo del 2006
Muchas Gracias chemian!!!!!!!!!!

Estaría bien pero como tenemos inserts, update, select en el codigo, si inutilizamos esos campos nos dara error porque no existe esa columna.

De todos modos muchas gracias, me he dado cuenta que no tengo que modificar la base datos para nada. Oculto de la aplicacion ese campo y entonces ese valor lo cogera como null. Como esa columna podía ser null, pues podemos cogerlo como NULL

Adios y gracias