IBMDB2简单查询错误901 - 系统错误

时间:2012-06-25 07:32:21

标签: sql db2 ibm-midrange

我正在研究IBM iseries v6r1m0系统。

我正在尝试执行一个非常简单的查询:

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)),它可以工作......

编辑:

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

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

  • 如果我插入一些数据:错误
  • 如果我清除表格:错误
  • 如果我删除索引(见下文):它可以工作(有或没有数据) !!

索引是:

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

编辑2:

这是工作日志(抱歉,这是法语......) joblog

它是sais:

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

4 个答案:

答案 0 :(得分:2)

我终于联系了IBM。

这是v5中的一个老版本。

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

答案 1 :(得分: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%')

答案 2 :(得分:0)

我知道这个家伙已经通过更新解决了他的问题。但是这里有一些对我有用的东西可能适合下一个遇到问题的人。

我的问题查询有很多常见的表表达式。他们中的大多数都没有创建包含大量记录的表。因此,如果我认为CTE的最大记录数为1000,我就添加了“仅获取前9999行”。我知道CTE不可能有更多的行。我想查询优化器对添加的内容的考虑较少。

如果您遇到此问题并且您无法升级或与IBM通信,我希望这对您有所帮助。

答案 3 :(得分:0)

对于得到此错误的其他人,我在IBM i Series v7r3上遇到它,尝试UPDATE时,使用内部SELECT检索要在字段上设置的值,其中多个结果在哪里使用DISTINCT减少到1。我解决了删除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'