2012-06-25 81 views
3

我正在使用IBM iseries v6r1m0系统。IBMDB2简单查询错误901 - 系统错误

我试图执行一个非常简单的查询:

select * from XG.ART where DOS = 998 and (DES like 'ALB%' or DESABR like 'ALB%') 

的列有:

DOS -> numeric (3,0) 
DES -> Graphic(80) CCSID 1200 
DESABR -> Garphic(25) CCSID 1200 

我得到:

SQL State : 58004 
SQL Code : -901 
Message : [SQL0901] SQL System error. 
Cause . . . . . : An SQL system error has occurred. The current SQL statement cannot be completed successfully. The error will not prevent other SQL statements from being processed. Previous messages may indicate that there is a problem with the SQL statement and SQL did not correctly diagnose the error. The previous message identifier was CPF4204. Internal error type 3107 has occurred. If precompiling, processing will not continue beyond this statement. 
Recovery . . . : See the previous messages to determine if there is a problem with the SQL statement. To view the messages, use the DSPJOBLOG command if running interactively, or the WRKJOB command to view the output of a precompile. An application program receiving this return code may attempt further SQL statements. Correct any errors and try the request again. 

如果我改变DES到REF(图形(25)),它的工作原理...

编辑:

我运行一些测试今天下午,这是很奇怪:

刚刚创建表/索引后,我没有错误。

  • 如果我插入一些DATAS:错误
  • 如果我收拾桌子:错误
  • 如果我删除索引(见下文):它的工作原理(带或不带DATAS) !

的指标为:

create index XG.GTFAT_ART_B on XG.ART(
DOS, 
DESABR, 
ART_ID 
) 

编辑2:

这里是作业日志(不好意思,这是法语...) joblog

它最高审计机关:

Function error X'1720' in machine instruction. Internal snapshot ID 01010054 
Foo file created in library QTEMP. 
*** stuff with the printer 
DBOP *** FAILED open. Exception from call to SLIC$ 
Internal error in the query processor file 
Sql system error 
+0

你不必换'DESABR'?确认会很好,但我假设你正在改变dds文件。这听起来像'DES'中可能有某种无效/奇怪的数据。 –

+0

@ X-Zero:包装DESABR是什么意思?我已经添加了一些信息... – Xavinou

+0

桌子的创建脚本是什么?我得到的是,你是否必须改变'DESABR'的定义来使其工作,或者只有'DOS'。 –

回答

2

我终于联系了IBM。

这是v5中的一个旧bug。

我已经安装了最新的PTF,现在它工作。

+1

您需要安装什么PTF? – Renier

0

您需要使用标量函数GRAPHIC将您的字符文字转换为LIKE谓词。

CREATE TABLE QTEMP/TEST (F1 GRAPHIC(80)) 
INSERT INTO QTEMP/TEST (F1) VALUES (GRAPHIC('TEST')) 
SELECT * FROM QTEMP/TEST WHERE F1 LIKE GRAPHIC('TE%') 
+0

你的榜样,我上插入语句:SQL状态:57017 SQL代码:-332 消息:[SQL0332] CCSID 1147和CCSID 1147不正确 – Xavinou

+0

@Xavinou我不知道你的工作已经在之间的字符转换DBCS。您能否在SQL0901错误之前包含joblog?诊断信息应该提供有关问题的线索。 – jamesallman

+0

我已添加joblog – Xavinou

0

我知道这个人得到了他的问题修正更新。但是这对我来说很有效,可能对那些有问题的下一个人有用。

我的问题查询有很多的公用表表达式。他们大多数没有创建具有大量记录的表格。因此,如果我认为CTE的最大记录数是1000,我就添加了“仅取第一行9999行”。我知道CTE不可能有比这更多的行。我猜查询优化器没有考虑添加的问题。

如果你有这个问题,你没有选择升级或与IBM交谈,我希望这可以帮助你。

0

对于其他人得到这个errore,我遇到了它在IBM i系列v7r3,尝试过的UPDATE时,检索值要在使用内SELECT在多个结果,其中减少到1,使用DISTINCT一个字段设置。我解决了删除DISTINCT并在内部SELECT的末尾添加FETCH FIRST 1 ROW ONLY的问题。

例如为:从

UPDATE MYTABLE AS T1 
SET T1.FIELD1 = (
    SELECT DISTINCT T2.FIELD5 
    FROM MYTABLE AS T2  
    WHERE T1.FIELD2 = T2.FIELD2 
     AND T1.FIELD3 = T2.FIELD3 
    ) 
WHERE T1.FIELD4 = 'XYZ' 

改为

UPDATE MYTABLE AS T1 
SET T1.FIELD1 = (
    SELECT T2.FIELD5 
    FROM MYTABLE AS T2  
    WHERE T1.FIELD2 = T2.FIELD2 
     AND T1.FIELD3 = T2.FIELD3 
    FETCH FIRST 1 ROW ONLY 
    ) 
WHERE T1.FIELD4 = 'XYZ'