2012-04-17 65 views
14

Tôi muốn chèn N hàng giống hệt nhau, ngoại trừ một trong các giá trị khác nhau. Cụ thể, đây là những gì tôi đang cố gắng:Oracle SQL - chèn nhiều hàng vào một bảng với một câu lệnh?

insert into attribute_list (id,value,name) 
values 
(
select (id,'Y','is_leveled') from value_list where val >= 50 
); 

Vì vậy, với mỗi giá trị có giá trị => 50, tôi sẽ chèn một hàng vào attribute_list. Điều này có thể được thực hiện với một câu lệnh chèn hay tôi chỉ nên tự tạo các chèn này trong excel?

(lưu ý: đây là một ví dụ nấu đơn giản để làm rõ vấn đề này, vì vậy không cần thiết phải tấn công needlessness của trường hợp cụ thể này)

+0

Vì vậy, nếu nhiều hàng trong VALUE_LIST cho cùng id có val> = 50, bạn có muốn chạy hàng cho id đó trong attribute_list? –

+0

@ShannonSeverance Câu hỏi hay. Tôi giả sử nếu tôi chỉ muốn nó một lần tôi chỉ cần chọn id duy nhất với một phụ chọn. – Jeremy

+1

Hoặc 'chọn id riêng biệt, 'Y', 'is_leveled' từ ....' –

Trả lời

22

Bạn hoàn toàn có thể làm điều này trong một tuyên bố duy nhất!

Hãy thử điều này:

INSERT INTO attribute_list (id, value, name) 
SELECT id, 'Y', 'is_leveled' 
FROM value_list WHERE val >= 50 
+0

Đẹp, cảm ơn! – Jeremy

1

Bạn có thể làm một SELECT ... INTO nếu bạn có thể truy vấn dữ liệu. Nếu không để tạo ra dữ liệu bạn cần phải sử dụng PL/SQL

Nếu bạn có các dữ liệu sau đó thử:

select id,'Y','is_leveled' 
INTO attribute_list 
from value_list where val >= 50 
4

Đó là những gì FOR loops là dành cho.

DECLARE 
    x NUMBER := 100; 
BEGIN 
    FOR i IN 1..10 LOOP 
     IF MOD(i,2) = 0 THEN  -- i is even 
     INSERT INTO temp VALUES (i, x, 'i is even'); 
     ELSE 
     INSERT INTO temp VALUES (i, x, 'i is odd'); 
     END IF; 
     x := x + 100; 
    END LOOP; 
    COMMIT; 
END; 
+0

Tôi nghĩ rằng điều này đã bỏ lỡ điểm của câu hỏi. Nó chèn nhiều giá trị, nhưng không phải với một câu lệnh duy nhất. – MJB

+0

Tôi xem xét những dòng này chèn các viết tắt thuận tiện cho điều thực: vòng lặp. Ngay sau khi mọi thứ chỉ nhận được nhẹ nhàng thú vị, bạn phải lặp lại anyway. – nes1983

2

Bạn cần INSERT từ CHỌN. Để làm như vậy, bạn nên bỏ qua VALUES và chỉ cần làm:

insert into attribute_list (id,value,name) 
select (id,'Y','is_leveled') from value_list where val >= 50; 

Dưới đây là một ví dụ: http://psoug.org/reference/insert.html

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