【问题标题】:CURSOR FOR LOOP光标循环
【发布时间】:2012-01-20 12:42:58
【问题描述】:

朋友

我正在编写一个执行以下操作的过程

1> 将一个临时表接收到的所有数据插入到主表中 2 一旦我们在主表中获得数据 - 将金额乘以 -1 - 将记录插入到 TEMP2 表中

实现上述任务

我的程序看起来像

CREATE OR REPLACE PROCEDURE MyProcesure(USER        IN VARCHAR2,
                                        VO_ERROR_CODE  OUT NUMBER,
                                        VO_ERROR_DESC  OUT nocopy VARCHAR2) IS

    v_data      VARCHAR2(2000);     

BEGIN


    VO_ERROR_CODE     := 0;
    VO_ERROR_DESC     := 'Success';

-- Insert all the data received by a temp table  into the main table 

INSERT INTO MAIN_TABLE (
COLUMN1,
COLUMN2,
COLUMN3,
COLUMN4)
SELECT M,COL1,
       M.COL2,
       M.COL3,
       M.COL4
FROM TEMP M 
WHERE M.A = VARIABLE1 ; 

-- Once we have the data in the main table 
 - Multiple the amount by -1 
  - Insert the records to TEMP2 Table
FOR v_data in
( SELECT COL1, COL2, COL3, COl4 FROM MAIN TABLE )   

LOOP

    v_data.COL2 := v_data.COL2 * -1 ; 


INSERT INTO TEMP2 
      (       COL1,
          COL2,
          COL3,
          COL4          
      )
    SELECT SELECT M.COL1, M.COL2, M.COL3, M.COl4 FROM MAIN TABLE; 

     GROUP BY M.COL1;

 END;

我使用了 Oracle CURSOR FOR LOOP,请告诉我这是否完美,或者我也可以使用显式游标。 谢谢

【问题讨论】:

    标签: plsql oracle11g


    【解决方案1】:

    我有点试图理解你想要什么,但即使是语法也是无效的......在那个循环中(读取为伪代码)你正在做的是重新插入 temp2 表中的所有记录对于 main_table 中的“每条”记录,所以基本上你所做的就是将记录相乘......

    我猜你想要的是将 COL2 数据乘以 -1,所以你应该删除循环并放入

    插入到 TEMP2 (COL1,COL2,COL3,COL4) 从 MAIN_TABLE 中选择 M.COL1、M.COL2*-1、M.COL3、M.COl4;

    除了用GROUP BY M.COL1 那里检查你想要什么。

    但首先你应该学习 pl/sql 语法及其主要概念。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-10-19
      • 1970-01-01
      • 2013-08-18
      • 2012-05-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多