Я немного новичок в DB2, и у меня возникают проблемы при разработке запроса.Я создал пользовательскую функцию, которая возвращает таблицу данных, к которой я хочу присоединиться и выбрать в более крупном операторе выбора.Я работаю над чувствительной БД, поэтому приведенный ниже запрос - это не то, что я в буквальном смысле выполняю, но он почти такой же (без других 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 (или другого предложения where, которое не проверяет идентификатор).Когда я включаю предложение where, я получаю следующую ошибку:
Ошибка при подготовке 58004 (-901) [IBM] [Драйвер CLI] [DB2 / LINUXX8664] SQL0901N Оператор SQL не выполнен из-занесерьезная системная ошибка.Последующие операторы SQL могут быть обработаны.(Причина «Неверный план; найден неразрешенный QNC».) SQLSTATE = 58004
Я обнаружил проблему, поскольку я использую один из критериев соединения для параметров (B.customerId).Я подтвердил этот факт, заменив B.customerId действительным customerId, и запрос отлично работает.Проблема в том, что я не знаю customerId при вызове этого запроса.Я знаю только orderId (в этом примере).
Есть мысли о том, как реструктурировать это, чтобы я мог сделать только один звонок, чтобы получить всю информацию?Я знаю, что план - это проблема, потому что до вызова функции не решен customerId.