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!)

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top