database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
Oracle
Informix
Sybase
MS-SQL
ㆍDB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
DB2 Q&A 1147 게시물 읽기
No. 1147
SQL문이 너무 길거나 복잡합니다
작성자
아추워
작성일
2006-11-01 10:42
조회수
11,470

      DECLARE @FLOCCDE  VARCHAR ( 50 ) ;  -- 대체창고코드

      DECLARE @FITMCDE  VARCHAR ( 50 ) ; -- 대체대상자재코드
      DECLARE @FQTY      FLOAT ;           -- 대체대상자재수량
      DECLARE @FCHAITM  VARCHAR ( 50 ) ;  -- 대체자재코드
      DECLARE @FCHAQTY  FLOAT ;           -- 대체수량
      
    
     -- HSH 2006.10.24 추가
     -- 자재변경
     DECLARE UP_MB1601_CHA_CUR CURSOR FOR
    
      SELECT FLOCCDE, FITMCDE, FQTY,FCHAITM,FCHAQTY
          FROM XPERTERP.T_C144
          WHERE FLOCCDE = 'S-0033' AND FCHADAT = @FYEARMONTH || @FSTOCKDAY;
    
     FOR FETCH ONLY ;


           
      SET AT_END = 0 ; 
      OPEN UP_MB1601_CHA_CUR ; 
      FETCH UP_MB1601_CHA_CUR INTO @FITMCDE, @FQTY,@FCHAITM, @FCHAQTY ;
      WHILE AT_END = 0 DO
            -- 대체대상자재코드
            IF EXISTS ( SELECT * FROM XPERTERP . T_M162 WHERE FMATYXM = @FYEARMONTH AND FMATDAT = @FSTOCKDAY AND FMATCDE = @FITMCDE AND FSTGDPT = '0008888' ) THEN       
                UPDATE XPERTERP . T_M162 SET FOUTQTY = FOUTQTY +  @FQTY
          WHERE FMATYXM = @FYEARMONTH AND FMATDAT = @FSTOCKDAY AND FMATCDE = @FITMCDE AND FSTGDPT = '0008888' ;
       ELSE
          INSERT INTO XPERTERP . T_M162 ( FMATYXM , FMATDAT , FMATCDE , FMATDIV , FOUTQTY , FSTGDPT )
         VALUES ( @FYEARMONTH , @FSTOCKDAY , @FITMCDE , 'A' , @FQTY , '0008888' ) ;
       END IF ; 
      
       -- 대체자재코드
       IF EXISTS ( SELECT * FROM XPERTERP . T_M162 WHERE FMATYXM = @FYEARMONTH AND FMATDAT = @FSTOCKDAY AND FMATCDE = @FCHAITM AND FSTGDPT = '0008888' ) THEN       

                UPDATE XPERTERP . T_M162 SET FINPQTY = FINPQTY +  @FCHAQTY
          WHERE FMATYXM = @FYEARMONTH AND FMATDAT = @FSTOCKDAY AND FMATCDE = @FCHAITM AND FSTGDPT = '0008888' ; 

       ELSE 

         INSERT INTO XPERTERP . T_M162 ( FMATYXM , FMATDAT , FMATCDE , FMATDIV , FINPQTY , FSTGDPT )
         VALUES ( @FYEARMONTH , @FSTOCKDAY , @FCHAITM , 'A' , @FCHAQTY , '0008888' ) ; 

       END IF ; 
       
       
       FETCH UP_MB1601_CHA_CUR INTO @FITMCDE, @FQTY,@FCHAITM, @FCHAQTY ;
      END WHILE ;
      CLOSE UP_MB1601_CHA_CUR ; 

위 문장을 실행하면 "SQL문이 너무 길거나 복잡합니다"라는 메시지가 뜨면서 저장 프로시져가 
만들어 지지 않습니다.  고수님들의 조언 부탁 드립니다.

이 글에 대한 댓글이 총 3건 있습니다.

명령문의 힙(stmtheap) 크기를 늘리십시오
확인 : db2 get db cfg for dbname | grep STMTHEAP
변경 : db2 update db cfg for dbname using stmtheap ? 
          db2stop
          db2start 


SQL0101N 명령문이 너무 길거나 너무 복잡합니다.
설명:
명령문이 너무 길거나 복잡하여 시스템 한계를 초과하거나, 제한조건 또는 트리거가 너무 많이 포함되어 명령문을 처리할 수 없습니다.

팩된 설명을 작성 또는 수정하는 명령문인 경우, 새로 팩된 설명이 시스템 카탈로그의 해당 컬럼에 비해 너무 클 수도 있습니다.

페더레이티드 시스템 사용자는 명령문에 대해 다음 사항도 점검해야 합니다.

길이 또는 복잡도에 대한 페더레이티드 서버의 시스템 한계 또는 데이터 소스의 시스템 한계를 초과하는지 여부
일부 다른 데이터 소스 특정 한계를 위반하는지 여부
명령문을 처리할 수 없습니다.

주:
서로 다른 코드 페이지로 실행 중인 응용프로그램과 데이터베이스에 대해 문자 데이터 변환이 수행되었으며, 변환 결과가 길이 한계를 초과합니다.
사용자 응답:
다음 중 하나를 수행하십시오.

명령문을 더 짧거나 덜 복잡한 SQL문으로 나누십시오.
데이터베이스 구성 파일의 명령문 힙(stmtheap) 크기를 늘리십시오.
명령문에 포함된 참조 제한조건이나 점검 수를 줄이거나 외부 키의 인덱스 수를 줄이십시오.
명령문에 포함된 트리거 수를 줄이십시오.
페더레이티드 시스템 사용자: 명령문이 실패한 데이터 소스(실패한 데이터 소스를 식별하기 위해 수행할 프로시저에 대해서는 문제점 해결 안내서 참조) 및 거부의 원인을 판별하십시오. 페더레이티드 서버에서 거부하는 경우, 데이터베이스 구성 파일에서 명령문의 힙(stmtheap) 크기를 늘리십시오.
sqlcode : -101

sqlstate : 54001 



stmtheap - 명령문 힙 크기 구성 매개변수

구성 유형
데이터베이스
매개변수 유형
구성 가능한 온라인
전파 클래스
명령문 바운더리
디폴트 [범위]
32비트 플랫폼 9
2048 [ 128 - 524 288 ]
64비트 플랫폼 9
4096 [ 128 - 524 288 ]
측정 단위
페이지(4KB)
할당 시기
각 명령문의 프리컴파일 또는 바인딩 도중
해제 시기
각 명령문의 프리컴파일 또는 바인딩이 완료될 때

명령문 힙은 SQL문의 컴파일 중 SQL 컴파일러의 작업 공간으로 사용됩니다. 이 매개변수는 이 작업 공간의 크기를 지정합니다.

이 영역은 영구적으로 할당된 상태에 있는 것은 아니지만, 처리된 모든 SQL문에 할당되고 해제됩니다. 동적 SQL문의 경우, 이 작업 영역은 프로그램 실행 중에 사용됩니다. 반면, 정적 SQL문의 경우에는 프로그램 실행 중이 아닌 바인드 프로세스 중에 사용됩니다.

권장사항: 대부분의 경우, 이 매개변수의 디폴트값을 사용하면 됩니다. 매우 큰 SQL문이 있는데 데이터베이스 관리 프로그램이 명령문의 최적화를 시도할 때 오류(명령문이 너무 복잡함)를 발행한 경우, 오류가 해결될 때까지 규칙적인 증분(256 또는 1024)으로 이 매개변수 값을 증가시켜야 합니다.

도님이 2006-11-01 12:24에 작성한 댓글입니다. Edit

초보 AS/400 사용자 입니다.
확인 : db2 get db cfg for dbname | grep STMTHEAP
변경 : db2 update db cfg for dbname using stmtheap ? 
          db2stop
          db2start 
위 명령을 어떻게 실행해야하는지 잘 모르겠습니다. 
AS/400 에뮬레이터에서 가능한지 , 아님 Iseries Navigator 에서 가능한 명령인지  자세히 좀 알려주시면 감사하겠습니다.

아추워님이 2006-11-02 19:40에 작성한 댓글입니다. Edit

SQL0101

Message Text: SQL statement too long or complex.
Cause Text: The SQL statement is longer than the limit allowed for length or complexity. The reason code is &1. One of the following reason codes indicates the error:
  • 1 - The total number of subselects in a fullselect (UNION or UNION ALL clause) is greater than 32.
  • 2 - The total number of columns, constants, and operators is greater than the SQL limits.
  • 3 - The sum of the lengths of the non-LOB columns in a select list, table, view definition, or user defined table function is greater than 32766 or the definition contains a LOB and the sum of the lengths specified on the ALLOCATE clause for varying-length fields and the non-varying field lengths is greater than 32740. The maximum length is reduced if any of the columns are varying-length or allow null values.
  • 4 - The total number of nested subselects is greater than 31.
  • 5 - The total length of the statement text is greater than 65535.
  • 6 - The relative position value specified on the FETCH statement is outside the range of valid values.
  • 7 - A system name could not be generated.
Recovery Text: Simplify the statement or divide the statement up into more than one statement and try the request again. For reason code 7, specify a different name for the table, view, index or alias.
SQLCODE or SQLCODEs: -101
SQLSTATE or SQLSTATEs: 54001 54010 54011

UDB와는 달리 AS400은 statement heap이 없나보네요.
도님이 2006-11-03 11:59에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
1152DB2에서 Non-Equijoin하는 방법 [1]
서미선
2006-11-02
7481
1151초보 AS/400 사용자 입니다
아추워
2006-11-02
6945
1150처음으로 [2]
김영국
2006-11-02
7590
1147SQL문이 너무 길거나 복잡합니다 [3]
아추워
2006-11-01
11470
1146C언어 서버 구축시 DB2 접근에 관해~ [3]
김선아
2006-11-01
8243
1145[질문]as400 DB2에서 오라클의 DECODE 와 같은 기능의 함수? [7]
이병철
2006-10-31
8503
1144db2 에서는 LONG 형을 어떻게 ....??/ [1]
디비초짜
2006-10-27
8789
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.018초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다