Процедура MySQL с параметром курсора - PullRequest
0 голосов
/ 09 ноября 2011

У меня есть следующий код, который должен возвращать список клиентов, которые моложе, чем указанный параметр возраста, и общее количество найденных записей.

Моя таблица состоит из: ID столбцов, FIRST_FIRSTNAME, LASTNAME, DATE_OF_BIRTH

Я мог бы легко сделать несколько ошибок в синтаксисе, логике и форматировании этой процедуры, но, простите, я новичок в этом!Вот моя процедура sql:

DELIMITER $$
DROP PROCEDURE IF EXISTS sample_procedure$$

CREATE PROCEDURE sample_procedure(IN actualinput INT)
BEGIN   
DECLARE no_more_customers int(4);
DECLARE l_customer_count int(4);
DECLARE l_id varchar(1);
DECLARE l_first_name varchar(10);
DECLARE l_last_name varchar(10);
DECLARE l_date_of_birth varchar(20);
DECLARE customer_list varchar(250);

DECLARE dateinput DATE;
SET dateinput=DATE_SUB(now(), interval actualinput year);


DECLARE cid CURSOR FOR
    SELECT ID, FIRST_FIRSTNAME, LAST_NAME, DATE_OF_BIRTH
    FROM customers WHERE DATE_OF_BIRTH >= dateinput;

DECLARE CONTINUE HANDLER FOR NOT FOUND SET no_more_customers=1;

SET no_more_customers=0;
SET l_customer_count=0;


OPEN cid;
cid_cursor: REPEAT
    FETCH cid INTO l_id, l_first_name, l_last_name, l_date_of_birth;            IF no_more_customers THEN
            LEAVE cid_cursor;
        END IF;
        SET customer_list=concat(customer_list, l_id,',',l_first_name,',',l_last_name,',',l_date_of_birth);
        SET l_customer_count=1+l_customer_count;

UNTIL no_more_customers
END REPEAT cid_cursor;
CLOSE cid;
SET no_more_customers=0;
SELECT customer_list AS Customers;
SELECT concat(l_customer_count);
END;
$$

У меня, похоже, есть ошибка в методе, который я использовал для расчета возраста клиентов, возможно, проблема в методе, который я использовал для вызова курсора и моего окончательного спискаиз клиентов только возвращает ноль.Заранее спасибо ...

1 Ответ

3 голосов
/ 09 ноября 2011

Я могу предположить, что переменная 'customer_list' должна быть инициализирована, например -

...
DECLARE customer_list VARCHAR(250) DEFAULT '';
...

, потому что 'SET customer_list = CONCAT (customer_list, ...)', когда customer_list равен NULL, также будет возвращать NULL.

Воспользуйтесь Отладчиком хранимых процедур MySQL .Надеюсь, что эта функция поможет вам.

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