MySQL: выбор нескольких полей в несколько переменных в хранимой процедуре

106

Могу ли я ВЫБРАТЬ несколько столбцов в несколько переменных в одном запросе выбора в MySQL?

Например:

DECLARE iId INT(20);
DECLARE dCreate DATETIME;

SELECT Id INTO iId, dateCreated INTO dCreate 
FROM products
WHERE pName=iName;

Каков правильный синтаксис для этого?

Охотник
источник

Ответы:

220

Ваш синтаксис не совсем правильный: вам нужно перечислить поля по порядку перед INTO и соответствующие целевые переменные после:

SELECT Id, dateCreated
INTO iId, dCreate
FROM products
WHERE pName = iName
Мартин Клейтон
источник
6
+1. Это тот случай, когда синтаксис T-SQL более ясен. Наличие их в виде отдельных списков вызывает ту же проблему обслуживания, что и DECLARE CURSOR и FETCH (не то чтобы я, ммм, когда-либо использовал их).
harpo
То же самое и для Pl / Sql.
Аникет Такур,
11

========== Посоветуйте ==========

@martin Clayton Ответ правильный, но это только совет.

Пожалуйста, избегайте использования неоднозначной переменной в хранимой процедуре.

Пример :

SELECT Id, dateCreated
INTO id, datecreated
FROM products
WHERE pName = iName

Приведенный выше пример вызовет ошибку (ошибка нулевого значения)

Приведенный ниже пример верен. Надеюсь, это имеет смысл.

Пример :

SELECT Id, dateCreated
INTO val_id, val_datecreated
FROM products
WHERE pName = iName

Вы также можете сделать их однозначными, обратившись к таблице, например:

[Кредит: maganap ]

SELECT p.Id, p.dateCreated INTO id, datecreated FROM products p 
WHERE pName = iName
Сиджо Виджаян
источник
Вы также можете сделать их однозначными, SELECT p.Id, p.dateCreated INTO id, datecreated FROM products p WHERE pName = iName
обратившись
2

В качестве альтернативы ответу Мартина вы также можете добавить часть INTO в конце запроса, чтобы сделать запрос более читабельным:

SELECT Id, dateCreated FROM products INTO iId, dCreate
ибай
источник
@KusalDissanayake Вопрос был задан по MySQL
ibai