免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3248 | 回复: 0
打印 上一主题 下一主题

DB2 II ODBC包装器的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-12-16 12:20 |只看该作者 |倒序浏览
我最近接到一个测试项目,需要用db2 II去包装一个国产品牌的数据库(华工DM),因为IBM没有对应的包装器,所以我用的是II ODBC wraper,测试中发现,在update 和delete 语句中如果带有where子句会报错,错误描述如下;希望有高手能伸伸手喽!!
------------------------------ 输入的命令 ------------------------------
DELETE FROM DB2ADMIN.TESTCHARTYPE2 TESTCHARTYPE2

   WHERE TESTCHARTYPE2.T1 = '123';
------------------------------------------------------------------------------
DELETE FROM DB2ADMIN.TESTCHARTYPE2 TESTCHARTYPE2 WHERE TESTCHARTYPE2.T1 = '123'
DB21034E  该命令被当作 SQL
语句来处理,因为它不是有效的“命令行处理器”命令。在 SQL 处理期间,它返回:
SQL30090N  对于应用程序执行环境,操作无效。原因码 = "21"。  SQLSTATE=25000

SQL30090N  对于应用程序执行环境,操作无效。原因码 = "21                                                                    "。

解释:

此操作对应用程序执行环境无效。例如,操作可能对具有特殊语句或 API
限制的应用程序无效 - 如那些在“XA 分布式事务处理”环境(如
CICS)中操作的应用程序;那些通过 CONNECT 的 2
类连接设置进行操作的应用程序;或那些使用联合系统功能来更新多个不同
种类的数据源的应用程序。操作被拒绝。

可能的原因码包括:


01 针对只读数据库发出了更改数据的 SQL 请求(如 INSERT 或
CREATE); 或针对只读数据库调用了存储过程。只读数据库包括下列类型:


o   在未使用“同步点管理器”或者远程 DRDA 数据库不支持第 2 层 DRDA
    协议时,当在具有连接设置 SYNCPOINT TWOPHASE
    的工作单元中操作,并在非 XA/DTP 环境中执行时使用 DRDA
    存取的数据库。

o   当“同步点管理器”网关不可用或远程 DRDA 数据库不支持第 2 层
    DRDA 协议时,在 XA/DTP 环境中使用 DRDA 存取的数据库。

o   当 SYNCPOINT ONEPHASE 连接设置对工作单元有效时,
    不是第一个被更改的数据库。



02 从具有设置 CONNECT 类型 2 连接,或正在 XA/DTP
环境中运行的应用程序中发出导致内部落实的
API(如“预编译”、“绑定”或“重组表”)。

03 当使用 ENCINA 或 TUXEDO 事务处理监视器时,在 XA/DTP
环境中对挂起的游标发出 SQL OPEN。

04 当在 XA/DTP 环境中时,发出 DISCONNECT 语句。

05 在 CONNECT 类型 2 连接或 XA/DTP 环境中发出包含 COMMIT
语句的复合 SQL 语句。

06 在 XA/DTP 环境中发出 SET CLIENT API。

07 在事务管理器未向其提供两阶段落实协调的工作单元中存取辅助数据库
。为确保数据完整性,不允许该操作。

08 为了使用来自不同于并发连接的数据库的源的落实协调而尝试存取数据
库。不能混合两种类型的协调,对当前数据库的操作被拒绝。

09 尝试对在“同步点管理器”协调下存取的数据库执行 XA/DTP
本地事务。

10 在下列情况下,对挂起的游标发出 SQL OPEN。

o   XA/DTP 环境,或

o   联合服务器正在存取在两阶段落实数据源上定义的昵称



在这些环境中不支持游标挂起。

11 传递不支持操作。

12 由于数据源上的限制,所以插入/更新/删除操作需要有时间戳记列和
唯一索引。对于存取数据源的更新/删除操作:

o   Fujitsu RDB2 要求存在唯一索引。



13 定位 UPDATE 或 DELETE 操作需要游标的 SELECT
列表中存在一列,但该列不存在于游标的 SELECT 列表中。

14 存在可更新游标、游标挂起和“可重复读”的隔离级别的非法组合。无
效组合是:

o   隔离级别“可重复读”和 WITH HOLD 游标

o   带 FOR UPDATE 的 WITH HOLD 游标



15 留作将来使用

16 SYSCAT.SERVERS 中有非法类型列和协议列值组合。

17 不能对昵称发出 REORG 实用程序。

18 当工作单元中的一个或多个数据源仅支持单阶段落实时,发出了将导致
多个数据源被更新的更新请求(或导致更新系统目录表的 DDL
操作)。可能的原因是:

o   试图更新仅支持单阶段落实的数据源,但在同一工作单元中已更新另一
    数据源。

o   试图更新支持两阶段落实的数据源,但在同一工作单元中已更新另一仅
    支持单阶段落实的数据源。

o   试图更新本地联合服务器表,但在同一工作单元中已更新仅支持单阶段
    落实的数据源。

o   当应用程序通过 CONNECT 的 2 类连接设置操作时,
    试图更新仅支持单阶段落实的数据源。



19 传递会话中的数据源不支持应用程序主机变量数据类型。

20 一个“工作单元”在进行时发出了 SET CLIENT INFORMATION。

21 您想在指定的数据源处执行的操作不受包装器的支持,DB2
就是通过该包装器来存取数据源的。
参阅文档以了解此包装器支持哪些操作。

22 联合插入、更新或删除操作在函数、数据更改表引用、动态复合语句、
触发器和应用程序执行环境中无效,在该环境中

o   SAVEPOINT 有效

o   使用了可滚动游标

o   目标视图包含多个表或昵称



23 API、数据结构或设置不受支持。

24 指定的包装器不支持数据类型映射。

25 指定的包装器不支持功能映射。

用户响应:

通过执行下列其中一个步骤更正该问题:


对于原因 01、02、03、04、06 或 19, 除去不受支持的语句或 API。

另外,对于原因 01、02、03、04 或 06, 在支持失败的语句或 API
的另一环境中执行应用程序。

对于原因 05, 将 COMMIT 请求移到复合语句之外。

对于原因 07,
在一个工作单元内仅存取一个数据库,对于该工作单元,将把 EXEC SQL
COMMIT 或 EXEC SQL ROLLBACK
替代同步点请求发送至外部事务管理器。若必须在工作单元里存取多个数据
库,则利用外部事务管理器产品提供的落实控制接口。

对于原因 08,
确保在工作单元内存取的所有数据库都在相同类型请求的落实控制之下:
外部事务处理监视器(如 CICS SYNCPOINT)或本地 COMMIT 和 ROLLBACK
EXEC SQL。

对于原因 09, 执行下列其中一个步骤:

o   执行该事务作为 XA/DTP 全局事务。

o   在非 XA/DTP 环境中存取数据库。

o   若该事务是只读的,则不要将“同步点管理器”的服务用于数据库连接
    。



对于原因 10 到 17(联合服务器用户),
隔离使请求失败的数据源的问题(请参阅
问题确定指南)并且检查对该数据源的限制。

对于原因 18, 执行下列其中一个步骤:

o   在对另一数据源发出更新之前,提交 COMMIT 或 ROLLBACK。

o   若需要在工作单元中更新多个数据源,则对于需要更新的所有数据源,
    确保已将 two_phase_commit 服务器选项设置为 'Y'。请参阅 SQL
    Reference  以获取有关设置用于 two_phase_commit
    设置的值的信息。

o   若要更新的数据源仅支持单阶段落实,而应用程序正在通过 CONNECT
    的 2 类连接设置值进行操作,则更改应用程序,使之通过 CONNECT
    的 1 类连接设置进行操作。



对于原因 20, 在调用 API 之前提交“落实”或“回滚”。

对于原因 22, 除去联合插入、更新或删除操作或:

o   在函数、数据更改表引用、动态复合语句或触发器外部执行联合插入、
    更新或删除操作

o   释放生效的保存点

o   除去可滚动游标的使用

o   重新定义目标视图以仅引用一个表或昵称

o   在触发器外执行联合插入、更新或删除操作。



对于原因码 23, 有关受支持的 API、数据结构和设置的列表,参阅
Administrative API Reference。

对于原因 24, 如果失败的语句为 CREATE TYPE
MAPPING,则不要重新提交该语句。如果失败的语句为 CREATE
SERVER,则检查 DB2 II
目录以找到服务器类型的类型映射并删除这些映射。在任何一种情况下,都
参阅数据源文档以获取有关数据源支持的类型和类型映射的信息。

对于原因码 25, 如果失败的语句为 CREATE
FUNCTIONMAPPING,则不要重新提交该语句。如果失败的语句为 CREATE
SERVER,则检查 DB2 II
目录以找到服务器类型的功能映射并删除这些映射。在任何一种情况下,都
参阅数据源文档以获取有关数据源支持的功能和功能映射的信息。

sqlcode :  -30090

sqlstate :  25000
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP