2013-04-29 4 views
0

Я новичок в SQL.SQL For Loop query

Я хочу вставить данные в таблицу, используя ниже для запроса цикла. Но не в состоянии идентифицировать проблему

declare 
cursor mac is SELECT DISTINCT(MAC) FROM DEVICES; 
cmd varchar2(200); 
begin 
for c in mac loop 
cmd := 'INSERT INTO MAC VALUES(DEVICES_ID_SEQ.nextVal,'||c.MAC||',"ABC","123")'; 
execute immediate cmd; 
end loop; 
end; 

Для каждого MAC в существующей таблице, я хочу, чтобы вставить новую запись.

+1

Не используйте курсор или PL/SQL, если он не нужен, пожалуйста! Посмотрите на ответ Quassnoi на то, что намного быстрее и намного меньше кода. Научитесь делать вещи на основе набора, используя SQL. –

+1

И динамический SQL также не нужен для этого случая. –

ответ

7

Для этого вам не нужен курсор.

Просто запустите:

INSERT 
INTO mac 
SELECT DEVICES_ID_SEQ.nextval, mac, 'abc', 123 
FROM (
     SELECT DISTINCT 
       mac 
     FROM devices 
     ) 
+0

Еще один отличный пример меньше. OP 1) использует динамический SQL (не требуется); 2), вероятно, имеет ошибку с MAC-адресом, который является строкой и поэтому должен быть указан в динамическом SQL; 3) несколько восприимчив к переполнению буфера строк всего 200 символов; 4) использует PL/SQL и курсор, где он не нужен в любом случае. –