DB2 预编译器不能识别声明部分中用户定义的数据类型(typefef,#define macros),位于 
EXEC SQL BEGIN DECLARE SECTION 和 
EXEC SQL END DECLARE SECTION 语句之间。 
由于参数类型不同,使用用户定义函数(UDF)(比如 ||、rawtohex、hextoraw,等等)开发的应用程序不能在 DB2 上编译。 
问题 1
如果在 
EXEC SQL BEGIN DECLARE SECTION 和 
EXEC SQL END DECLARE SECTION 语句之间使用了用户定义的数据类型(例如 C/C++ 中的 “typedef”)和宏(#define),那么 DB2 预编译器在编译这些程序时会遇到一些问题。
因此,如果将一个包含嵌入式 SQL 语句的文件(.sqC)传递到 db2 precompile 命令,则编译时会提示出错。如清单 1 所示。
注:
此示例只是为了描述问题并在编译之后生成相应的错误,所以其形式非常简单。要重现此场景,可以执行 db2 "create table test_table (dept int)" 命令创建一个 “TEST_TABLE” 表。  
考虑如下的 test1.sqC 文件: 
清单 1. test1.sqC                
#include <stdio.h>
#define LONGBIG long
/* 
Or we can have 
a definition like:
typedef long LONGBIG
*/
EXEC SQL INCLUDE SQLCA;
EXEC SQL BEGIN DECLARE SECTION;
        LONGBIG col1_val;
EXEC SQL END DECLARE SECTION;
int main()
{        
EXEC SQL SELECT DEPT 
        INTO :col1_val 
        FROM TEST_TABLE;        
        return 0;
}      
当试图使用 db2 prep 编译 test1.sqC 文件时,会得到以下错误:
清单 2. 预编译 test1.sqC 的结果                
db2 prep test1.sqC bindfile 
LINE    MESSAGES FOR test1.sqC
------  --------------------------------------------------------------------
        SQL0060W  
The "C++" precompiler is 
in progress.
   11   SQL0008N  
The token "LONGBIG" 
found in a host variable                  declaration is not valid.
   18   SQL4942N  
The statement selects an incompatible data type
                  into 
host variable ":col1_val".  SQLSTATE=42806
        SQL0095N  No bind file was created because of previous
                  errors.
        SQL0091W  Precompilation or binding was ended with "3"
                  errors and "0" warnings.
[db2inst1]/users/ganesh_gosavi/mig1/issues/NULL_issue>       
出现这些错误是因为 DB2 预编译器不能解析一些 typedef 和宏,这些 typedef 和宏用于通过 
EXEC SQL BEGIN DECLARE SECTION 和 
EXEC SQL END DECLARE SECTION 语句定义的声明部分