在 sql plus 中的脚本中运行循环

Posted

技术标签:

【中文标题】在 sql plus 中的脚本中运行循环【英文标题】:Running loop in script in sql plus 【发布时间】:2012-11-26 12:43:40 【问题描述】:

我在 sql plus 中运行一个脚本,我的脚本中有一个 for 循环:

BEGIN
  FOR count IN 1..100 LOOP
    INSERT INTO CompanyShare VALUES (count, 1, 250);
  END LOOP;
END;

BEGIN
  FOR count IN 101..200 LOOP
    INSERT INTO CompanyShare VALUES (count, 2, 50);
  END LOOP;
END;

当我运行脚本时出现了这个错误:

ORA-06550:第 6 行,第 1 列:PLS-00103:遇到符号“BEGIN”

我哪里错了?

【问题讨论】:

您在第一个块的末尾错过了 ;。而且我不会使用count作为变量名,因为它是一个sql保留字。 已纠正但仍然给我同样的错误 如帕拉多所说,还添加一个/ 【参考方案1】:

尝试在end;之后添加/,如下所示:

BEGIN
  FOR count IN 1..100 LOOP
    INSERT INTO CompanyShare VALUES (count, 1, 250);
  END LOOP;
END;
/ --<-- Here
BEGIN
  FOR count IN 101..200 LOOP
    INSERT INTO CompanyShare VALUES (count, 2, 50);
  END LOOP;
END;

【讨论】:

谢谢...现在我的脚本正在运行 很高兴能帮到你:)【参考方案2】:

看看你的逻辑,你甚至可以根据条件简化脚本。

  BEGIN
  FOR count IN 1..200
   LOOP
    INSERT INTO CompanyShare VALUES (count
                                    ,CASE WHEN count<=100 THEN 1   ELSE 2  END
                                    ,CASE WHEN count<=100 THEN 250 ELSE 50 END
                                    );
   END LOOP;
  END;
  /

【讨论】:

【参考方案3】:

结束后没有分号。试试这个

BEGIN
  FOR count IN 1..100 LOOP
   INSERT INTO CompanyShare VALUES (count, 1, 250);
  END LOOP;
END ;   --****
BEGIN
 FOR count IN 101..200 LOOP
  INSERT INTO CompanyShare VALUES (count, 2, 50);
 END LOOP;
END;

【讨论】:

以上是关于在 sql plus 中的脚本中运行循环的主要内容,如果未能解决你的问题,请参考以下文章

如何忽略从 SQL Plus 运行的 SQL 脚本中的 & 符号?

如何在 PowerShell 中运行 SQL Plus 脚本

Shell 脚本中的 SQL* PLUS 连接问题

Ansible - 当至少一个项目在循环中失败时跳过任务

sql plus中嵌套循环的困惑

SQL 存档脚本