2013-04-29 64 views
0

我是SQL新手。SQL For Loop查询

我想使用下面的for-loop查询插入数据到表中。 但无法识别问题

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来完成基于集合的方式。 – 2013-04-29 09:42:47

+1

这种情况下也不需要动态SQL。 – 2013-04-29 09:45:21

回答

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和一个不需要它的游标。 – 2013-04-29 09:54:55