Domanda

Utilizzando Informix, ho creato una tabella temporanei, che sto cercando di compilare da una dichiarazione prescelta. Dopo questo, voglio fare un aggiornamento, per popolare più campi nella tabella temporanei.

Così sto facendo qualcosa di simile;

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

Ma non è possibile selezionare nulla.

Per esempio:

select first 1 current from systables

opere, ma

select first 1 null from systables

fallisce!

(Non fatemi parlare sul perché non posso fare uno SQL Server come "selezionare la corrente" con nessuna tabella specificato!)

È stato utile?

Soluzione

Questa pagina dice che la ragione per cui non si può fare che è perché "NULL" non avere un tipo. Quindi, la soluzione è quella di creare uno sProc che restituisce semplicemente NULL nel tipo desiderato.

Che suona come una brutta soluzione per me però. Forse si potrebbe creare una variabile nello script, impostarlo su null, quindi selezionare quella variabile invece? Qualcosa di simile a questo:

DEFINE dummy INT;
LET dummy = NULL;

SELECT group_ser, item_ser, dummy
FROM sometable

Altri suggerimenti

Non è necessario scrivere una stored procedure; è sufficiente per dire che tipo IDS il NULL è. Supponendo che non si utilizza IDS 7.31 (che non supporta alcuna notazione getto), è possibile scrivere:

SELECT NULL::INTEGER FROM dual;

SELECT CAST(NULL AS INTEGER) FROM dual;

E, se non si dispone di dual come una tabella (che probabilmente non), si può fare una delle poche cose:

CREATE SYNONYM dual FOR sysmaster:"informix".sysdual;

La tabella 'sysdual' stato aggiunto in tempi relativamente recenti (IDS 11.10, IIRC), quindi se si utilizza una versione precedente, esso non esiste. Le seguenti opere con qualsiasi versione di IDS -. È quello che io 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;

idiomaticamente, se avete intenzione di scegliere tra systables per ottenere una singola riga, si dovrebbe includere 'WHERE tabid = 1'; questa è la voce per systables sé, e se non è presente, il fatto che la vostra istruzione SELECT fa tornare tutti i dati è l'ultimo dei tuoi problemi. (Non ho mai visto che come un errore, però.)

SELECT group_ser, item_ser, replace(null,null) as my_null_column
FROM sometable

oppure è possibile utilizzare nvl(null,null) per restituire un nulla per la vostra dichiarazione prescelta.

C'è qualche motivo per andare per una tabella effettiva? Sono stato con

select blah from table(set{1})
select blah from table(set{1})

è bello quando si utilizza 10.x database. Questa affermazione non tocca database. La quantità di operazioni di lettura / scrittura è uguale a 0,

ma

quando si utilizza 11.x vi costerà almeno 4500 buffer di legge perché questa versione di Informix crea questa tabella in memoria ed esegue query di esso.

select to_date(null) from table;

Questo funziona quando voglio ottenere un appuntamento con valore nullo

È possibile utilizzare questa espressione ( '' 1) sulla lista SELECT, invece di parola chiave null. Si restituisce valore NULL di tipo DECIMAL (2,0).

Questa ( '' 1,0001) restituisce DECIMAL (16,4). E così via.

Se si desidera DATA tipo Utilizza la data ( '' + 1) per ottenere valore nullo di tipo DATE.

( '' + 1) ||' 'Restituisce una stringa vuota di tipo VARCHAR (1).

Per ottenere il valore NULL di tipo VARCHAR (1) usa questa espressione: DATA ( '' + 1) ||' '

Funziona in 9.xe 11.x.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top