Informix: Seleccione problema nula
Pregunta
El uso de Informix, he creado una tabla pasaje provisorio, que estoy tratando de llenar de una instrucción de selección. Después de esto, quiero hacer una actualización, para rellenar más campos en la tabla pasaje provisorio.
Así que estoy haciendo algo como;
create temp table _results (group_ser int, item_ser int, restype char(4));
insert into _results (group_ser, item_ser)
select
group_ser, item_ser, null
from
sometable
Sin embargo, no se puede seleccionar nula.
Por ejemplo;
select first 1 current from systables
obras, sino
select first 1 null from systables
falla!
(No me refiero a eso que no puedo acaba de hacer un SQL Server como "actual seleccione" sin mesa especificados!)
Solución
Esta página dice que la razón por la que no se puede hacer es decir porque "NULO" no tener un tipo. Por lo tanto, la solución es crear un procedimiento almacenado que simplemente devuelve NULL en el tipo que desee.
Eso suena como una muy mala solución para mí, sin embargo. Tal vez usted podría crear una variable en el script, establecen a NULL, a continuación, seleccione esa variable en su lugar? Algo como esto:
DEFINE dummy INT;
LET dummy = NULL;
SELECT group_ser, item_ser, dummy
FROM sometable
Otros consejos
Usted no tiene que escribir un procedimiento almacenado; sólo tiene que decirle qué tipo de IDS la nula es. Suponiendo que no está utilizando IDS 7.31 (que no es compatible con cualquier anotación fundido), se puede escribir:
SELECT NULL::INTEGER FROM dual;
SELECT CAST(NULL AS INTEGER) FROM dual;
Y, si usted no tiene dual
como una tabla (que probablemente no), se puede hacer una de las pocas cosas:
CREATE SYNONYM dual FOR sysmaster:"informix".sysdual;
La tabla 'sysdual' se añadió hace relativamente poco tiempo (IDS 11.10, IIRC), por lo que si usted está utilizando una versión anterior, no va a existir. Los siguientes trabajos con cualquier versión de IDS -. Que es lo que yo uso
-- @(#)$Id: dual.sql,v 2.1 2004/11/01 18:16:32 jleffler Exp $
-- Create table DUAL - structurally equivalent to Oracle's similarly named table.
-- It contains one row of data.
CREATE TABLE dual
(
dummy CHAR(1) DEFAULT 'x' NOT NULL CHECK (dummy = 'x') PRIMARY KEY
) EXTENT SIZE 8 NEXT SIZE 8;
INSERT INTO dual VALUES('x');
REVOKE ALL ON dual FROM PUBLIC;
GRANT SELECT ON dual TO PUBLIC;
idiomáticamente, si se va a seleccionar a partir systables para obtener una sola fila, debe incluir 'WHERE tabid = 1
'; ésta es la entrada por sí mismo systables, y si no lo tiene, el hecho de que la instrucción SELECT hace volver los datos es el menor de sus problemas. (Nunca he visto que como un error, sin embargo.)
SELECT group_ser, item_ser, replace(null,null) as my_null_column
FROM sometable
o puede utilizar nvl(null,null)
para devolver un valor nulo para su instrucción de selección.
¿Hay alguna razón para ir a una tabla real? He estado usando
select blah from table(set{1})
select blah from table(set{1})
es agradable cuando se utiliza 10.x base de datos. Esta declaración no toca la base de datos. La cantidad de operaciones de lectura / escritura es igual a 0,
y
cuando se está utilizando 11.x le costará al menos 4.500 búfer lee porque esta versión de Informix crea esta tabla en memoria y ejecuta la consulta contra ella.
select to_date(null) from table;
Esto funciona cuando quiero conseguir una cita con el valor nulo
Puede utilizar esta expresión ( '' 1) en la lista de selección, en lugar de palabras clave nula. Se evalúa a valor NULL de tipo DECIMAL (2,0).
Este ( '' 1,0001) se evalúa como DECIMAL (16,4). Y así sucesivamente.
Si desea FECHA FECHA tipo de uso ( '' + 1) para obtener el valor nulo de tipo DATE.
( '' + 1) ||' 'Evalúa a una cadena vacía de tipo VARCHAR (1).
Para obtener un valor NULL de tipo VARCHAR (1) utiliza esta expresión: FECHA ( '' + 1) ||' '
Funciona en 9.xy 11.x.