【问题标题】:SQL For Loop querySQL For 循环查询
【发布时间】:2013-04-29 09:28:02
【问题描述】:

我是 SQL 的新手。

我想使用下面的 for 循环查询将数据插入表中。 但无法确定问题

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,我想插入新记录。

【问题讨论】:

  • 如果不需要,请不要使用游标或 PL/SQL!看看 Quassnoi 的答案,它的速度要快得多,代码要少得多。学习使用 SQL 以基于集合的方式做事。
  • 这种情况也不需要动态SQL。

标签: sql database oracle for-loop


【解决方案1】:

你不需要一个光标。

只要运行:

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

【讨论】:

  • 另一个少即是多的好例子。 OP 1) 使用动态 SQL(不需要); 2) 可能存在 MAC 地址为字符串的错误,因此应在动态 SQL 中引用; 3) 有点容易溢出仅 200 个字符的字符串缓冲区; 4) 在不需要的地方使用 PL/SQL 和游标。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-06-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多