Допустим, у вас есть три текстовых поля, которые вы можете использовать для поиска данных. Каждое текстовое поле будет соответствовать столбцу в таблице DB2. Введенная вами строка поиска будет вставлена в предложение where. Например, у вас есть имя, фамилия и номер телефона. Если вы не вводите данные в определенное текстовое поле, я по умолчанию устанавливаю его значение в предложении where на '_', подстановочный знак, чтобы выбрать все. Также допустим, что в таблице номер телефона определен как NULL.
Курсор1 будет использоваться, если пользователь ввел номер телефона для поиска. Так что предложение where будет выглядеть примерно так:
Где FIRST_NAME нравится: имя И
LAST_NAME, как: фамилия И
PHONE_NBR как: номер
Это работает, когда данные вводятся для номера телефона. Но если поиск выполняется только по имени, курсор возвращает частичные результаты или не дает результатов, потому что переменная хоста: number будет заполнена подстановочным знаком "_". PHONE_NBR подобно '_' будет возвращать только те строки, которые имеют действительное значение. Если для строки PHONE_NBR указано значение NULL, совпадающее с именем, которое вы искали, эта строка не будет отображаться. Поэтому я создал второй курсор.
Курсор2 будет использоваться, если пользователь НЕ ввел номер телефона для поиска. Предложение Where выглядит примерно так:
Где FIRST_NAME нравится: имя И
LAST_NAME, как: фамилия И
(PHONE_NBR как: номер ИЛИ
PHONE_NBR = NULL)
Итак, еще раз, если поиск был выполнен только по имени, а некоторые значения в PHONE_NBR имеют данные, некоторые равны нулю, ВСЕ, которое соответствует искомому имени, будет отображаться в результатах - что хорошо. Для строк со значениями в PHONE_NBR, PHONE_NBR как '_' получит их. Для строк с нулем в PHONE_NBR, PHONE_NBR IS NULL получит их.
Это небольшая, но необходимая разница. Из-за этого небольшого различия я хотел бы объединить эти два курсора в один. Как это можно сделать для достижения тех же результатов?