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 条件的主要内容,如果未能解决你的问题,请参考以下文章