【发布时间】:2011-09-01 18:36:44
【问题描述】:
我对 DB2 有点陌生,在开发查询时遇到了麻烦。我创建了一个用户定义的函数,它返回一个数据表,然后我想在更大的 select 语句中加入并从中选择。我正在处理一个敏感的数据库,所以下面的查询并不是我真正正在运行的,但它几乎完全一样(没有其他 10 个连接,我必须做大声笑)。
select
A.customerId,
A.firstname,
A.lastname,
B.orderId,
B.orderDate,
F.currentLocationDate,
F.currentLocation
from
customer A
INNER JOIN order B
on A.customerId = B.customerId
INNER JOIN table(getShippingHistory(B.customerId)) as F
on B.orderId = F.orderId
where B.orderId = 35
如果我在没有 where 子句(或其他不检查 ID 的 where 子句)的情况下运行此查询,这将非常有用。当我包含 where 子句时,我收到以下错误:
准备期间出错 58004(-901)[IBM][CLI 驱动程序][DB2/LINUXX8664] SQL0901N 由于系统不严重,SQL 语句失败 错误。可以处理后续的 SQL 语句。 (原因“糟糕的计划; 找到未解析的 QNC”。) SQLSTATE=58004
我已将问题归结为我正在使用参数 (B.customerId) 的连接条件之一。我通过将 B.customerId 替换为有效的 customerId 来验证这一事实,并且查询效果很好。问题是,调用此查询时我不知道 customerId。我只知道 orderId(在这个例子中)。
关于如何重组它以便我只能拨打 1 次电话以获取所有信息的任何想法?我知道计划是在调用函数之前 customerId 没有得到解决的问题。
【问题讨论】:
标签: db2 user-defined-functions