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 зрозуміліший. Якщо вони є окремими списками, викликає таку ж проблему з технічним обслуговуванням, що і ДЕКЛАРАЦІЯ 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
maganap

2

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

SELECT Id, dateCreated FROM products INTO iId, dCreate

@KusalDissanayake Питання було задано для MySQL
ibai
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.