Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Oracle »

Ahora problema con NULL's

Estas en el tema de Ahora problema con NULL's en el foro de Oracle en Foros del Web. Hola nuevamente. Van a decir que que bien !"!#!"#, pero son algunas cosas que por estar probando de poco a poco, porque tengo algunas otras ...
  #1 (permalink)  
Antiguo 02/11/2007, 18:05
 
Fecha de Ingreso: septiembre-2005
Mensajes: 73
Antigüedad: 18 años, 7 meses
Puntos: 0
Pregunta Ahora problema con NULL's

Hola nuevamente.

Van a decir que que bien !"!#!"#, pero son algunas cosas que por estar probando de poco a poco, porque tengo algunas otras cosas que hacer, no le puedo dar todo el tiempo que quisiera.

Bueno, ahora, me he encontrado con esto:

Tengo definida una columna como NOT NULL y al tratar de hacer un INSERT como el siguiente me da un error:

INSERT INTO Tabla(CampoLlave, ColumnaNOTNULL) VALUES ('Llave', '')

ERROR:
Código:
ORA-01400: cannot insert NULL into ("BD"."TABLA"."ColumnaNOTNULL")
He estado leyendo algunas cosas por ahi, y me he encontrado con que en ORACLE la cadena vacía '' es igual a poner un NULO en la BD.

Tengo varias preguntas:

1) Es cierto esto? Por las pruebas que he hecho creo que si. Esta ya si quieren no me la respondan.. Sorry

2) Hay alguna propiedad en ORACLE para decirle que la cadena vacia no la considere NULO?

3) Si es que no existe esta propiedad, alguna idea de como resolver esta inserción? Esta inserción la hago con parametros.

Gracias de antemano
__________________
Henry :-D
  #2 (permalink)  
Antiguo 02/11/2007, 22:22
Avatar de Linterns
Colaborador
 
Fecha de Ingreso: diciembre-2001
Mensajes: 2.799
Antigüedad: 22 años, 4 meses
Puntos: 11
Re: Ahora problema con NULL's

puedes hacer dos cosas

1- Alterar la tabla que el campo not null tome un valor determinado

Ej: ALTER TABLE table MODIFY (nombrecampo VARCHAR2(100) NOT NULL DEFAULT) "0");

2- Crear un trigger que al tratar de insertar un campo nulo lo covierta a un valor predeterminado que pongas

if :new.campo is NULL then
:new.campo='0';
End if;

La sintaxis en la ultima tendras que hacerla en Update e Insert de la tabla
__________________
Bien se puede recibir una puñalada sin adulación,
pero rara vez se recibe una adulación sin puñalada
** ***
  #3 (permalink)  
Antiguo 02/11/2007, 22:40
Avatar de matanga  
Fecha de Ingreso: octubre-2007
Ubicación: España
Mensajes: 1.091
Antigüedad: 16 años, 6 meses
Puntos: 85
Re: Ahora problema con NULL's

Hola,

Buena pregunta, esta es una referencia de la documentacion de Oracle, donde explica el tratamiento para las cadenas string vacias.

PL/SQL trata a cualquier cadena de longitud cero como nulo. Esto incluye los valores devueltos por las funciones de caracteres y expresiones BOOLEAN. Por ejemplo, las siguientes declaraciones asignan nulls a la variables:

DECLARE
null_string VARCHAR2(80) := TO_CHAR('');
address VARCHAR2(80);
zip_code VARCHAR2(80) := SUBSTR(address, 25, 0);
name VARCHAR2(80);
valid BOOLEAN := (name != '');

Por lo tanto queda confirmado que '' es igual a NULL.

O sea que:

1. Si, es cierto.
2. No, no hay ninguna propiedad para modificar este comportamiento, al menos no hay una que este documentada.
3. Aqui es donde debes preguntarte cual seria el sentido de establecer una columna como NOT NULL e insertar una cadena vacia. Si bien es cierto que en MS SQL Server, por dar un ejemplo, NULL es distinto de '', en mi opinion esto carece de logica, aunque tambien soy conciente de que es una discusion filosofica que lleva años dando vueltas entre los distintos motores de base de datos.

Saludos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:41.