2013-05-01 41 views
9

hướng dẫn này hoạt động:SELECT INTO với hơn một thuộc tính

SELECT INTO unsolvedNodes array_agg(DISTINCT idDestination) 
FROM road 
WHERE idOrigin = ANY(solvedNodes) 
AND NOT (idDestination = ANY(solvedNodes)); 

Nhưng tôi muốn sử dụng một cái gì đó theo cách này:

SELECT INTO unsolvedNodes array_agg(DISTINCT idDestination), lengths array_agg(length) 
FROM road 
WHERE idOrigin = ANY(solvedNodes) 
AND NOT (idDestination = ANY(solvedNodes)); 

Làm thế nào để sử dụng chỉ có một hướng dẫn "SELECT INTO" để thiết lập nhiều biến?

Trả lời

18

Trong PL/pgSQL bạn có thể SELECT INTOnhư nhiều biến cùng một lúc như bạn muốn trực tiếp. Bạn chỉ có cú pháp ngược:

SELECT INTO unsolvedNodes, lengths 
     array_agg(DISTINCT idDestination), array_agg(length) 
FROM road 
WHERE idOrigin = ANY(solvedNodes) 
AND NOT (idDestination = ANY(solvedNodes)); 

bạn có từ khóa INTO theo sau là một danh sách các biến mục tiêu, và bạn có một danh sách SELECT tương ứng. Mục tiêu của điều khoản INTO có thể (trích dẫn the manual here):

... một biến ghi lại, một biến liên tiếp, hoặc một danh sách bằng dấu phẩy của biến đơn giản và các lĩnh vực thu âm/hàng.

Ngoài ra:

Mệnh INTO có thể xuất hiện bất cứ nơi nào trong lệnh SQL. Thông thường nó được viết ngay trước hoặc ngay sau danh sách select_expressions trong lệnh SELECT hoặc ở cuối lệnh cho các loại lệnh khác. Chúng tôi khuyên bạn nên tuân theo quy ước này trong trường hợp trình phân tích cú pháp PL/pgSQL trở nên nghiêm ngặt hơn trong các phiên bản sau.

Đây là không bị nhầm lẫn với SELECT INTO in the SQL dialect of Postgres - không ai nên sử dụng nữa. Nó đi ngược lại với SQL chuẩn và cuối cùng sẽ bị loại bỏ, rất có thể. Hướng dẫn sử dụng tích cực không khuyến khích việc sử dụng liên tục:

Tốt nhất nên sử dụng CREATE TABLE AS cho mục đích này trong mã mới.

+0

Cảm ơn bạn! Cảm ơn bạn đã tham khảo thủ công! –

+1

Huh. Tôi không bao giờ biết điều đó, và chắc chắn đã nhét thứ gì đó lên khi tôi thử nghiệm. –

Các vấn đề liên quan