使用游标获取不同的值

时间:2017-03-17 10:28:53

标签: oracle plsql cursor

我有两个表2017和2018.两个表都有相同的列,但值不同。我希望获得每列的不同值,并且我希望确保2018年的所有唯一列出现在2017年。每个表中有超过100列。我已经使用游标尝试了以下查询。结果将存储在名为' RESULT_MINUS'

的其他表格中
height = total_hight / ranks;
std::vector<float> data(width * (height + 2));
float* image = &data[width];
float* ghost_north = &data[0]
float* ghost_south = &data[width * (height + 1)]
float* inner_north = image;
float* inner_south = &image[width * (height - 1)]
MPI_Scatter(root_image, width * height, MPI_FLOAT,
            image, width * height, MPI_FLOAT, ...);
...
iterations {
    MPI_SendRecv(inner_north, width, MPI_FLOAT, north, tag,
                 ghost_north, width, MPI_FLOAT, north, tag, ...)
    MPI_SendRecv(inner_south, width, MPI_FLOAT, south, tag,
                 ghost_south, width, MPI_FLOAT, south, tag, ...)
   ... compute ...
}
MPI_Gather(image, width * height, MPI_FLOAT,
           root_image, width * height, MPI_FLOAT, ...);

提前致谢..

2 个答案:

答案 0 :(得分:0)

为什么要在内部循环中使用游标来插入差异?只是做:

INSERT INTO RESULT_MINUS ( . . . ) -- always include the columns
    SELECT 'B001', 'COMPARE', '2018', 'COL', COL, 'NOT PRESENT IN 2017'
    FROM (SELECT DISTINCT COL
          FROM COMPARE_2018_P1
          MINUS
          SELECT DISTINCT COL
          FROM COMPARE_2017_P1
         ) c;

至于循环表中的列,这是合理使用游标。

您的代码不起作用,因为需要在内部循环中定义DIFFERENCE游标。但根本不需要它。

答案 1 :(得分:0)

如果要使用OptionsControl逻辑,则必须动态定义CURSOR游标(替换列名)。

变化

DIFFERNECE

OPEN DIFFERENCE;

并删除光标的定义。

但当然,由于更好的表现,使用来自其他答案的动态插入的方法是优先的。