2013-06-21 137 views
0

我尝试做以下SELECT语句在DB2存储过程:DB2别名在Select语句连接字符串

FOR c AS (SELECT o.id id 
        ,o.col1 col1 
        ,o.title title 
        ,o.locale locale 
        ,lower(desc1.detail1) CONCAT lower(desc1.detail2) CONCAT lower(desc1.detail3) CONCAT lower(desc1.detail4) description 
        ,lower(absc1.detail1) || lower(absc1.detail2) || lower(absc1.detail3) || lower(absc1.detail4) abstract 
       FROM table_name o 
       INNER JOIN desc_table ON o.id = desc1.some_id 
        AND o.desc1 = desc1.id 
       INNER JOIN table_detail absc1 ON o.id = absc1.owner_id 
        AND o.abstract = absc1.id 
       WHERE o.id = xid 
       ) DO 

,并采取了以下错误:

[IBM][CLI Driver][DB2/NT64] SQL0789N The data type for parameter or SQL variable "DESCRIPTION" is not supported in the routine, compound SQL statement, or parameter list of a cursor value constructor. LINE NUMBER=... SQLSTATE=429BB 

的问题是在lower(desc1.detail1) CONCAT lower(desc1.detail2) CONCAT lower(desc1.detail3) CONCAT lower(desc1.detail4) description行 似乎别名description不适用于连接字符串。

同样的情况是:

lower(absc1.detail1) || lower(absc1.detail2) || lower(absc1.detail3) || lower(absc1.detail4) abstract 

也许您有什么建议?

谢谢。

+0

尝试增加AS:'低(desc1.detail1)CONCAT较低(desc1.detail2)CONCAT较低(desc1.detail3)CONCAT较低(desc1.detail4)AS description' – Mikhail

回答

1

尝试

JOIN desc_table desc1 

这个问题似乎是,你还没有定义DESC1。

如果说明是保留字,请更改名称或将其放在双引号中。

使用较低的连接字符串可能会使性能稍微好一些。

lower(a || b || c) 
+0

查询通过政策改变,在现实查询JOIN desc_table desc1使用正确 – ygalav

+0

较低(a || b || c)从工程中溶出好了,谢谢WarrenT。 – ygalav

+1

就我个人而言,我可能只是使用'd'或'd1'而不是'desc1'。如果你要缩短它,那么为什么不保留它*短*?但是,嘿,我很懒,我避免了一些额外的按键。 ;-) – WarrenT