Sybase 存储过程迁移至DB2错误集锦——不断更新

由于工作需要将Sybase 数据库的存储过程迁移至DB2 数据库上,由于我之前没接触过Sybase 和DB2 所以这个学习过程相对来说比较曲折,我下面将迁移过程中遇到的各种问题总结在一起,方便以后翻阅,集锦会随着学习进度不断添加内容……

集锦格式:

错误提示:……

解决方法:……

1.    错误提示:DB2 SQL Error: SQLCODE=-104,SQLSTATE=42601, SQLERRMC=<cursor declaration>;;<SQL statement>,DRIVER=3.50.152

 消息: Anunexpected token "<cursor declaration>" was found following"<cursor declaration>". 

 Expected tokens may include: "<SQL statement>".. SQLCODE=-104, SQLSTATE=42601,DRIVER=3.50.152

 

解决方法:DB2 声明变量要有序的要求:首先声明:普通变量;其次声明:游标;最后声明:condition handler。将游标的声明位置放到普通变量之后

 

2.    错误提示:DB2 SQL Error: SQLCODE=-104,SQLSTATE=42601, SQLERRMC=<variabledeclaration>;;<SQL statement>,DRIVER=3.50.152

 消息: An unexpected token"<variable declaration>" was found following "<variabledeclaration>". 

Expected tokensmay include:  "<SQL statement>"..SQLCODE=-104, SQLSTATE=42601, DRIVER=3.50.152

 

解决方法:DB2 声明变量要有序的要求:首先声明:普通变量;其次声明:游标;最后声明:condition handler。将普通变量的声明位置放到最前面。

 

3.    错误提示:DB2 SQL Error: SQLCODE=-440,SQLSTATE=42884, SQLERRMC=PATINDEX;FUNCTION, DRIVER=3.50.152

 消息: Noauthorized routine named "PATINDEX" of type "FUNCTION"having compatible arguments was found.. SQLCODE=-440, SQLSTATE=42884,DRIVER=3.50.152

 

解决方法:将 patindex 函数替换为  locate  函数。

 

 4.   Sybase 中的全局变量@@rowcount 在DB2 中如何使用?网上的解决办法如下:

答:db2中也有此全局变量,具体使用如下:

通过声明变量tempCount,使用语句

DECLARE TEMPCOUNT BIGINT DEFAULT = 0;

GET DIAGNOSTICS tempCount = ROW_COUNT;

问题:我在按照上面解决办法的时候会报一下错误提示sqlcode =-401 错误

解决方法:将定义类型 BIGINT  改为 INT

你可能感兴趣的:(sql,db2,Sybase,存储,include,Diagnostics)