哪有数据库抱怨sql太复杂的
其实就是一个简单的update语句
- UPDATE TAB1 SET COL1 =
- SUBSTRING(COL1 FROM 1 FOR POSITION( "AAAAAA" IN UPSHIFT(COL1))-1)
- || "BBBBBB"||
- SUBSTRING(COL1 FROM
- POSITION( "AAAAAA" IN UPSHIFT(COL1)) + 7
- FOR CHAR_LENGTH(COL1) - POSITION( "AAAAAA" IN UPSHIFT(COL1)) - 7)
- WHERE POSITION( "AAAAAA" IN UPSHIFT(COL1)) > 0;
这个语句就是想把一个字段的AAAAAA替换成BBBBBB而已,不过sql/mp没有提供replace之类的函数,只好用这样的土方法了。(如果这个字段有5个AAAAAA,则这个语句要执行5次,呵呵,够土)
但是执行的时候出错:
*** ERROR from SQL [-8300]: File system error occurred on
*** \XXXXX.$DATA01.TEST.TAB1.
*** ERROR from File System [1133]: The selection expression or update expression
*** is too complex to be represented in NonStop SQL/MP internal data
*** structures.
哪有数据库抱怨sql太复杂的,只有人脑想不到的,没有机器处理不了的。
如果用select来选这个字段(当然包括那些函数)的话则没问题,所以应该说这些函数的组合应该没问题的,可能是数据类型限制。结果把表定义中这个字段改小一点就好了。试了几次,G06.28的话是1424,如果char列的长度是1425,就会出上面的错误。