문제

Informix를 사용하여 Select 문에서 채워 지려는 Tempory 테이블을 만들었습니다. 그 후, 나는 Tempory 테이블에 더 많은 필드를 채우기 위해 업데이트를하고 싶습니다.

그래서 나는 같은 일을하고 있습니다.

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 서버를 할 수없는 이유를 시작하지 마십시오!)

도움이 되었습니까?

해결책

이 페이지 당신이 그렇게 할 수없는 이유는 "null"에 유형이 없기 때문입니다. 따라서 해결 방법은 원하는 유형에서 단순히 NULL을 반환하는 SPROC를 만드는 것입니다.

그래도 그것은 나에게 꽤 나쁜 해결책처럼 들립니다. 스크립트에서 변수를 만들고 NULL로 설정 한 다음 대신 해당 변수를 선택할 수 있습니까? 이 같은:

DEFINE dummy INT;
LET dummy = NULL;

SELECT group_ser, item_ser, dummy
FROM sometable

다른 팁

저장된 절차를 작성할 필요는 없습니다. 당신은 단순히 Null이 어떤 유형인지 ID를 말해야합니다. 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) 이전 버전을 사용하는 경우에는 존재하지 않습니다. 다음은 모든 버전의 ID와 함께 작동합니다. 제가 사용하는 것입니다.

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

관용적으로, 단일 행을 얻기 위해 Systabs에서 선택하려면 포함해야합니다. 'WHERE tabid = 1';; 이것은 Systabs 자체의 항목이며, 누락 된 경우, Select 문이 데이터를 반환한다는 사실은 문제가 가장 적습니다. (그래도 오류로 본 적이 없습니다.)

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

또는 사용할 수 있습니다 nvl(null,null) SELECT 문에 대한 NULL을 반환합니다.

실제 테이블을 찾아야 할 이유가 있습니까? 나는 사용하고있다

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

10.x 데이터베이스를 사용할 때 좋습니다. 이 명령문은 데이터베이스를 터치하지 않습니다. 읽기/쓰기 작업의 양은 0,

하지만

11.x를 사용하는 경우이 버전의 Informix가 메모리 에서이 테이블을 생성하고 쿼리를 실행하기 때문에 최소 4500 개의 버퍼 읽기가 비용이들 것입니다.

select to_date(null) from table;

이것은 Null Value의 데이트를 원할 때 작동합니다.

NULL 키워드 대신 선택 목록 에서이 표현식 ( ''+1)을 사용할 수 있습니다. 10 진수 유형 (2,0)의 널 값으로 평가됩니다.

이 ( ''+1.0001)는 10 진수 (16,4)로 평가됩니다. 등등.

날짜 유형을 원하는 경우 사용 날짜 ( ''+1)가 유형 날짜의 널 값을 얻으십시오.

( ''+1) || ' '빈 유형의 varchar (1)로 평가됩니다.

varchar (1)의 널 값을 얻으려면이 표현식을 사용하십시오 : 날짜 ( ''+1) || ' '

9.x 및 11.x에서 작동합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top