5

Informix を使用して、select ステートメントから入力しようとしている一時テーブルを作成しました。この後、更新を行い、一時テーブルにさらにフィールドを入力したいと思います。

だから私は次のようなことをしています。

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

ただし、null は選択できません。

例えば;

select first 1 current from systables

動作しますが

select first 1 null from systables

失敗します!

(テーブルを指定せずに「現在の選択」のような SQL Server を実行できない理由について、私を始めさせないでください!)

4

7 に答える 7

23

ストアド プロシージャを記述する必要はありません。NULL の型を IDS に伝えるだけです。IDS 7.31 (キャスト表記をサポートしていない) を使用していないと仮定すると、次のように記述できます。

SELECT NULL::INTEGER FROM dual;

SELECT CAST(NULL AS INTEGER) FROM dual;

また、dualテーブルとして持っていない場合 (おそらく持っていない場合)、次のいずれかを行うことができます。

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

「sysdual」テーブルは比較的最近 (IDS 11.10、IIRC) に追加されたため、古いバージョンを使用している場合は存在しません。以下は IDS のどのバージョンでも動作します - 私が使用しているものです。

-- @(#)$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;

慣用的に、単一の行を取得するために Systables から SELECT する場合は、' WHERE tabid = 1' を含める必要があります。これは Systables 自体のエントリであり、欠落している場合でも、SELECT ステートメントがデータを返すという事実は、問題を最小限に抑えます。(ただし、それをエラーと見なしたことはありません。)

于 2009-03-20T22:58:35.280 に答える
5

このページには、「NULL」には型がないため、それができない理由があると書かれています。したがって、回避策は、必要な型で単純に NULL を返す sproc を作成することです。

しかし、それは私にとってかなり悪い解決策のように聞こえます。スクリプトで変数を作成し、それを null に設定してから、代わりにその変数を選択できますか? このようなもの:

DEFINE dummy INT;
LET dummy = NULL;

SELECT group_ser, item_ser, dummy
FROM sometable
于 2009-03-20T12:42:40.300 に答える
3
SELECT group_ser, item_ser, replace(null,null) as my_null_column
FROM sometable

またはnvl(null,null)、select ステートメントに対して null を返すために使用できます。

于 2010-07-14T17:28:12.643 に答える
2

実際のテーブルに行く理由はありますか?私は使用しています

select blah from table(set{1})
于 2009-04-06T16:59:24.483 に答える
1
select blah from table(set{1})

10.x データベースを使用している場合は便利です。このステートメントはデータベースには触れません。読み取り/書き込み操作の量は 0 に等しく、

しかし

11.x を使用している場合、このバージョンの Informix はメモリ内にこのテーブルを作成し、それに対してクエリを実行するため、少なくとも 4500 回のバッファ読み取りが必要になります。

于 2012-05-31T07:35:56.380 に答える
0

null キーワードの代わりに、この式 (''+1) を SELECT リストで使用できます。DECIMAL(2,0) 型の NULL 値に評価されます。

この (''+1.0001) は DECIMAL(16,4) に評価されます。等々。

DATE 型が必要な場合は、DATE(''+1) を使用して DATE 型の null 値を取得します。

(''+1)||' ' VARCHAR(1) 型の空の文字列として評価されます。

タイプ VARCHAR(1) の NULL 値を取得するには、次の式を使用します: DATE(''+1)||' '

9.x および 11.x で動作します。

于 2014-03-17T14:36:08.137 に答える