문제

나는 Informix (버전 7.32) DB를 사용하고 있습니다. 한 번의 작업에서는 일반 테이블의 ID와 직렬 열이있는 온도 테이블을 만듭니다 (따라서 일반 테이블의 모든 ID가 연속적으로 번호가 매겨집니다). 그러나 ID로 주문한 일반 테이블에서 정보를 삽입하고 싶습니다.

CREATE TEMP TABLE tempTable (id serial, folio int );

INSERT INTO tempTable(id,folio)
SELECT 0,folio FROM regularTable ORDER BY folio;

그러나 이것은 구문 오류를 만듭니다 (주문으로 인해)

정보를 주문한 다음 유혹에 삽입 할 수있는 방법이 있습니까?

업데이트 :이 작업을 원하는 이유는 일반 테이블에 약 10,000 개의 항목이 있고 JSP 파일에 모든 레코드를 표시해야하지만 오래 걸릴 것이므로이 작업을 원하는 실제 이유는 이렇게합니다. 페이지 출력. 이 버전의 Informix에는 없습니다 Limit ...도 아니다 Skip. 관계에 있기 때문에 연재물을 갱신 할 수 없으며, 이것은 한 페이지에서 고정 된 결과를 얻을 수있는 유일한 솔루션입니다 (예 : 페이지 당 500 개 결과). 일반 테이블에서 삭제 되었기 때문에 ID (Folio)를 건너 뛰었습니다. 내가 넣으면

SELECT * FROM regularTable WHERE folio BETWEEN X AND Y

한 페이지에서 300 명, 다음 페이지에서 500을 얻을 수 있습니다.

도움이 되었습니까?

해결책

Select를 통해 커서를 반복하는 시도를 시도 할 수 있습니다.

다른 팁

SQL을 두 개의 온도 테이블로 나누면이 작업을 수행 할 수 있습니다.

CREATE TEMP TABLE tempTable1 (
id serial,
folio int);

SELECT folio FROM regularTable ORDER BY folio
INTO TEMP tempTable2;

INSERT INTO tempTable1(id,folio) SELECT 0,folio FROM tempTable2;

Informix에서 삽입 문에서 Select를 하위 클라스로 사용할 때 SELECT 구문의 서브 세트로 제한됩니다.

이 경우 다음과 같은 조항은 지원되지 않습니다.

  • 온도로
  • 주문
  • 노동 조합.

또한 Select의 From Clause는 삽입물에서 참조 된 것과 동일한 테이블을 참조 할 수 없습니다 (이 경우에는 중요하지 않음).

내가 Informix에서 일한 지 몇 년이 지났지 만 아마도 이와 같은 것이 효과가있을 것입니다.

INSERT INTO tempTable(id,folio)
SELECT 0, folio 
FROM (
    SELECT folio FROM regularTable ORDER BY folio
);

테이블에 삽입 할 때 행을 주문하는 것은 의미가 없습니다. 관계형 데이터베이스는 테이블의 행 순서를 지정할 수 없습니다.

가능하더라도 SQL은 쿼리가 삽입 한 순서와 같이 어떤 순서로든 행을 반환한다고 보장하지 않습니다. 당신은 an을 지정해야합니다 ORDER BY 쿼리 결과 주문을 보장하기위한 조항.

따라서 행을 삽입하는 순서를 변경하는 것은 좋지 않을 것입니다.

Bill에서 언급했듯이 입력을 주문하는 점이 많지 않으므로 출력을 주문해야합니다. 당신이 제공 한 단순한 예에서, 그것은 단지 의미가 없기 때문에, 나는 당신이 해결하려는 실제 문제가 더 복잡하다고 가정 할 수 있습니다.

당신이 뒤 따르는 기능 CREATE SEQUENCE, 그러나 나는 그것이 구식의 Informix에서 사용할 수 없다고 확신합니다.

당신이 요구하는 일을 정말로해야한다면, 당신은 조사 할 수 있습니다. UNLOAD필요한 순서로 데이터를 작성 한 다음 LOAD다시 in. 이는 직렬 값이 순차적으로 할당되도록합니다.

이런 일이 작동할까요?

SELECT
    folio
FROM
    (
        SELECT
            ROWNUM n,
            folio
        FROM
            regularTable
        ORDER BY 
            folio
    )
WHERE
    n BETWEEN 501 AND 1000

테이블이 커지거나 나중에 "페이지"를 가져 오면 10k 행이 꽤 작습니다.

Informix에 Rownum 개념이 있는지 여부는 기억 나지 않습니다. Oracle을 사용합니다.

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