MySQL: Chọn nhiều trường thành nhiều biến trong một thủ tục được lưu trữ


106

Tôi có thể CHỌN nhiều cột thành nhiều biến trong cùng một truy vấn chọn trong MySQL không?

Ví dụ:

DECLARE iId INT(20);
DECLARE dCreate DATETIME;

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

Cú pháp chính xác cho điều này là gì?

Câu trả lời:


220

Cú pháp của bạn không hoàn toàn đúng: bạn cần liệt kê các trường theo thứ tự trước INTO và các biến mục tiêu tương ứng sau:

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

6
+1. Đây là trường hợp cú pháp T-SQL rõ ràng hơn. Việc có những danh sách này dưới dạng danh sách riêng biệt gây ra cùng một vấn đề bảo trì như DECLARE CURSOR và FETCH (không phải tôi đã từng sử dụng chúng).
harpo

Tương tự cho Pl / Sql là tốt.
Aniket Thakur

11

========== Tư vấn ==========

@martin clayton Câu trả lời là đúng, nhưng đây chỉ là lời khuyên.

Vui lòng tránh sử dụng biến không rõ ràng trong quy trình được lưu trữ.

Thí dụ :

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

Ví dụ trên sẽ gây ra lỗi (lỗi giá trị null)

Ví dụ dưới đây là chính xác. Tôi hy vọng điều này có ý nghĩa.

Thí dụ :

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

Bạn cũng có thể làm cho chúng rõ ràng bằng cách tham chiếu bảng, như:

[Tín dụng: maganap ]

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

Bạn cũng có thể làm cho họ rõ ràng bằng cách tham khảo bảng, như:SELECT p.Id, p.dateCreated INTO id, datecreated FROM products p WHERE pName = iName
maganap

2

Ngoài câu trả lời của Martin, bạn cũng có thể thêm phần INTO vào cuối truy vấn để làm cho truy vấn dễ đọc hơn:

SELECT Id, dateCreated FROM products INTO iId, dCreate

@KusalDissanayake Câu hỏi được đặt ra cho MySQL
ibai
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.