2 个要求:1)用 FORALL 替换多个 FOR 循环 2)在向表中插入数据时使用 IF-THEN-ELSE 条件

Posted

技术标签:

【中文标题】2 个要求:1)用 FORALL 替换多个 FOR 循环 2)在向表中插入数据时使用 IF-THEN-ELSE 条件【英文标题】:2 requirements: 1) Replace multiple FOR loop with FORALL 2) use IF-THEN-ELSE condition while inserting data into table 【发布时间】:2014-02-27 11:25:07 【问题描述】:

我的要求有点不同。我有两个嵌套的 FOR 循环来获取数据并根据特定条件将排序的数据插入到表中。

原文如下:

FOR Name_1 IN First_Cursor
LOOP
  FOR Name_2 IN Second_Cursor (Name_1.Table_Field_Name)
  LOOP
    IF (Condition)
      THEN
        Prevalidation of data

        INSERT INTO <Table_Name>
          VALUES (..............................);
      ELSE
        IF (Condition)
        THEN
          Prevalidation of data

          UPDATE <Table_Name>
            WHERE .....................;

      END IF;
    END IF;
  END LOOP;
END LOOP;

我必须将整个代码转换为 FORALL

我尝试了很多代码,但都成功了,我认为语法本身是错误的

IF (Condition)
THEN
  Prevalidation of data

  FORALL Name_2 IN Second_Cursor (Name_1.Table_Field_Name) of Name_1
    INSERT INTO <Table_Name>
      VALUES (..............................);
ELSE
  IF (Condition)
  THEN
    Prevalidation of data
    FORALL Name_2 IN Second_Cursor (Name_1.Table_Field_Name) of Name_1
      UPDATE <Table_Name>
        WHERE .....................;    
  END IF;
END IF;

【问题讨论】:

【参考方案1】:

请在 sql 中使用“case”语句,如下所示:

语法:

CASE [ expression ]

   WHEN condition_1 THEN result_1
   WHEN condition_2 THEN result_2
   ...
   WHEN condition_n THEN result_n

   ELSE result

END

SQL:

 select column1,column2,
    ( case when col3>0 then col4 else col5 end) as 'col_name' ,
    ( case when col6='value' then col7 else col8 end) as 'col_name1' 
    from 
    table_name
    where col_name13>45

【讨论】:

您好,感谢您的快速回复。如果我使用 FOR 循环,使用 CASE 会很有帮助,因为 FORALL 使用单个插入语句,我在执行时遇到问题。这是我正在尝试的代码: 您好,感谢您的快速回复。如果我使用 FOR 循环,使用 CASE 会很有帮助,因为 FORALL 使用单个插入语句,我在执行时遇到问题。我想完全删除 FOR 循环并使用 FORALL。如果你能用示例代码告诉我,那将非常有帮助。

以上是关于2 个要求:1)用 FORALL 替换多个 FOR 循环 2)在向表中插入数据时使用 IF-THEN-ELSE 条件的主要内容,如果未能解决你的问题,请参考以下文章

ORACLE批量绑定FORALL与BULK COLLECT

Python:替换多个 for 循环、多个迭代器

在 PL/SQL Oracle 中将 FOR 语句转换为 FORALL

在循环中替换每一个大行中的第 n 个出现

网络流算法与建模总结

如何在 APEX 应用程序的 csv 文件的批量数据插入中使用 forall 语句