Как создать хранимую процедуру, которая будет искать запись в таблице с заданным параметром клиентским приложением и возвращать найденные данные строки? - PullRequest
0 голосов
/ 29 марта 2012

Я пытаюсь создать хранимую процедуру, которая будет использоваться клиентским приложением для поиска клиентов в таблице customers, а затем возвращать всю информацию о клиенте, если он найден. Я создал процедуру для добавления клиента в таблицу:

DELIMITER $

CREATE PROCEDURE `add_cust` (IN custF VARCHAR(100), IN custL VARCHAR(100))
BEGIN
    INSERT INTO customers (cFirst, cLast) VALUES(custF, custL);
END $

И это работает.

Моя customers таблица очень проста - автоинкрементный первичный ключ, первый и последний столбцы.

Я не могу обернуться вокруг этой другой search процедуры. То, как я это вижу, - это две процедуры поиска. Одна процедура использует First Name для поиска клиента, а вторая - Last Name.

Полагаю, мне придется использовать курсор FOR SELECT с предложением WHERE и цикл WHILE. Но как мне вернуть результат клиентскому приложению? Объявить ли один из параметров хранимой процедуры как OUT? Или я просто объявляю один параметр как INOUT?

Пока это то, где я нахожусь:

DELIMETER $

CREATE PROCEDURE `searchCustByFirst` (IN custF VARCHAR(100))
BEGIN

END $

1 Ответ

1 голос
/ 29 марта 2012

Это очень просто -

CREATE PROCEDURE searchCustByFirst(IN custF VARCHAR(100))
BEGIN
  SELECT cFirst, cLast FROM customers WHERE cFirst = custF;
END

Эта процедура вернет набор данных, просто прочитайте его в приложении.

Другое решение заключается в использовании параметров OUT, например -

CREATE PROCEDURE searchCustByFirst(IN custF VARCHAR(100), OUT custL VARCHAR(100))
BEGIN
  SELECT cLast INTO custL FROM customers WHERE cFirst = custF;
END

В этом случае оператор SELECT не может возвращать более одной записи, поэтому поле критериев cFirst должно быть уникальным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...