首页 > 解决方案 > 使用 INTO 分配给 Oracle 中的变量

问题描述

作为背景。我正在尝试将按函数分组的结果分配给变量。有了这个,我想做类似的事情

while count > n/2
BEGIN 
UPDATE table1
set exclude_reason = ....
......

n 是来自 groupby 函数的记录数。

我只是想基本上将其用作重复检查,但对于其他情况,我遇到了许多重复项,标准的重复检查可能会删除相同的 9/10 记录;我只想摆脱其中的一半。

我研究了使用 INTO 这似乎是最标准的方法。这是解决此类问题的最佳方法吗?

示例数据:

在此处输入图像描述

group by 将是 groupby id,amount,price,type

从那里我想迭代并更新按功能分组的一半结果。

标签: sqloracle

解决方案


如果您真的想使用 INTO,在我看来,您必须按照以下方式做一些事情

FOR aRow IN (SELECT DISTINCT ID, AMOUNT, PRICE, TYPE
               FROM SOME_TABLE)
LOOP
  SELECT COUNT(*)
    INTO n
    FROM SOME_TABLE
    WHERE ID = aRow.ID AND
          AMOUNT = aRow.AMOUNT AND
          PRICE = aRow.PRICE AND
          TYPE = aRow.PRICE;

  -- do whatever you want with n here
END LOOP;

但我不明白你为什么要这样做,除非这里有一些外部要求INTO。你最好做

FOR aRow IN (SELECT ID, AMOUNT, PRICE, TYPE, COUNT(*) AS N
               FROM SOME_TABLE
               GROUP BY ID, AMOUNT, PRICE, TYPE)
LOOP
  -- do whatever you want with aRow.N here
END LOOP;

推荐阅读