2014-10-21 1 views
0

일부 절차는 PostgreSQL에서 새 DB2 환경으로 마이그레이션합니다. 나는 그것의 대부분을 다 가지고 있지만 내부 행 집합/레코드에 대한 변수를 선언하는 방법을 찾을 수 없습니다.DB2 저장 프로 시저 : 내부 "행 집합"을 지정하십시오.

DECLARE 
    counts RECORD; 
BEGIN 
    -- fill "counts" with one row of aggregated data 
    SELECT 
    COUNT(....) AS failed_inserts, 
    COUNT(....) AS failed_updates, 
    COUNT(....) AS failed_deletes, 
    INTO counts 
    FROM (...) 

    -- check "counts" with some conditionals 
    IF counts.failed_inserts > 0 
     (...) 
    END IF; 
    (...) 

    -- return info depending on the data 
    RETURN (...); 

END 

내가 다른 곳에서 온라인으로 IBM 설명서의 "계산"을 선언거나 동등한를 찾을 수 없습니다 :

는 기본적으로 어떤 절차가 포스트 그레스에하는 일은 이것이다. 필요한 행은 정적 (집계 된 데이터의 3 열)입니다. 따라서 가능한 경우 해당 열을 하드 코드로 선언하는 것으로 충분할 것입니다.

DB2의 저장 프로 시저 내에서 레코드/데이터 세트/"가상 테이블"을 선언 할 수 있습니까?

iSeries 용 DB2가 아닌 Linux 용 DB2 (V10.5)를 사용하고 있습니다.

올바른 솔루션-의 답변 포인트 @mustaccio : 다음
CREATE TYPE empRow AS ROW (failed_inserts INTEGER, failed_updates INTEGER, failed_deletes INTEGER);

당신이 절차 내에서 새로운 유형을 선언 할 수

절차의 외부가 필요한 ROWTYPE을 만들 DECLARE newRow empRow;

답변

0

나는 당신이 원하는 것을 완전히 이해하고 있는지 모르지만, 당신은을 찾고 있을지도 모른다.데이터 유형? 이 같은 것 :

DECLARE 
    TYPE counts_row AS ROW (
     failed_inserts INT, 
     failed_updates INT, 
     failed_deletes INT 
    ); 
    counts counts_row; 
BEGIN 
    -- fill "counts" with one row of aggregated data 
    SELECT 
    COUNT(....) AS failed_inserts, 
    COUNT(....) AS failed_updates, 
    COUNT(....) AS failed_deletes, 
    INTO counts 
    FROM (...); 
    ... 

PS. 검증되지 않은.

자세한 정보 in the manual. 의

FOR counts AS c1 CURSOR FOR SELECT COUNT(.....) AS failed_inserts, 
            COUNT(....) AS failed_updates, 
            COUNT(....) AS failed_deletes, 
           FROM (...) 
DO 
    IF counts.failed_inserts > 0 THEN 
     (....) 
    END IF; 
END FOR; 

** 영구 의미 뭔가 : 더 많거나 적은 특정 단일 쿼리에있는 영구 ** 사용자 정의 형식을 만드는 대신에

+0

포인터 주셔서 감사합니다. DB2는 사용자 코드 ('예상치 못한 토큰 "<유형 선언> [...]')을 허용하지 않았지만 사용자가 지적한 매뉴얼의 장을 통해 코드를 완료 할 수있었습니다. 내 게시물을 수정하겠습니다. –

+0

코드에 PL/SQL과 DB2 SQL PL 구문을 혼합하지 말고 PL/SQL을 선택하면 Oracle 호환성을 사용하십시오. – mustaccio

0

, 당신은 또한 FOR statement를 사용하여 동일한을 달성 할 수 시스템 카탈로그에 정의되어 있습니다.