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
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.