2010-03-15 6 views
77

Можно ли выбрать несколько столбцов для нескольких переменных в одном и том же запросе выбора в MySQL?MySQL: выбор нескольких полей для нескольких переменных в хранимой процедуре

Например:

DECLARE iId INT(20); 
DECLARE dCreate DATETIME; 

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

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

ответ

164

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

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

+1. Это случай, когда синтаксис T-SQL более ясен. Наличие этих как отдельных списков приводит к той же проблеме обслуживания, что и DECLARE CURSOR и FETCH (не то, что я использую их). – harpo

+0

То же самое для Pl/Sql. –

1

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

SELECT Id, dateCreated FROM products INTO iId, dCreate 
7

========== ========== Консультировать

@martin Клейтон Ответ я Правильно, но это только совет.

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

Пример:

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 
+0

Я столкнулся с этой проблемой, спасибо за добавление к вышеуказанному ответу. – Benp44

+0

Вы также можете сделать их однозначными, ссылаясь на таблицу, как: 'SELECT, p.Id, p.dateCreated INTO ид, datecreated из продуктов р WHERE PNAME = iName' – maganap

+0

хорошее предложение Спасибо @maganap –

Смежные вопросы