오류 메세지
 

DB2 Embedded SQC 코드 작성 시, 동일한 호스트 변수를 서로 다른 Scope에서 각각 선언하면 프리컴파일 수행 시 다음의 오류가 발생하는 문제

SQL0307N The host variable "호스트변수명" is already defined.

 

 원인
 

다음 규칙은 호스트 변수 선언 섹션에 적용됩니다.

  • 모든 호스트 변수는 SQLDA 구조를 참조하는 호스트 변수를 제외하고, 참조되기 전에 소스 파일에서 올바른 형식의 선언 섹션 내에 선언되어야 합니다.
  • 소스 파일에서 복수의 선언 섹션을 사용할 있습니다.
  • 호스트 변수 이름은 소스 파일 내에서 고유해야 합니다. DB2 프리컴파일러는 호스트 언어별 변수 범위 지정 규칙을 고려하지 않기 때문입니다. 그러므로, 호스트 변수에 대해 하나의 범위가 존재합니다.

:

이는 DB2® 프리컴파일러가 호스트 변수의 범위를 전역으로 변경하여 호스트 변수를 정의된 범위 외부에서 액세스할 있음을 의미하지는 않습니다.

 

 조치
 

DB2 InfoCenter에 설명에 따르면,

하나의 SQC 파일 안에 호스트변수 선언문은 여러 번 사용될 수 있으나,

호스트 변수명은 유일해야 한다고 가이드 되고 있으므로

중복적으로 사용되는 호스트 변수를 Global로 선언하거나,

중복 사용되는 호스트 변수를 포함하는 함수들을 개별적인 SQC 파일로 분리하여 사용하는 것을 권장함.

( 같은 이름의 호스트 변수가 사용되는지를 체크하지 못하게 하는 프리컴파일 옵션은 존재하지 않음 )

 

 참고

http://publib.boulder.ibm.com/infocenter/db2luw/v9/index.jsp?topic=/com.ibm.db2.udb.apdv.embed.doc/doc/c0005632.htm

+ Recent posts