2011-12-14 121 views
0

朋友遊標FOR循環

我寫,做以下

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,請讓我知道這是否完美,或者我也可以使用顯式遊標。 謝謝

回答

2

我很想理解你想要什麼,但即使語法是無效的...在該循環(閱讀爲僞代碼)你在做什麼是重新插入所有記錄在main_table「每」記錄temp2表,基本上你在做什麼是乘以記錄...

我想你想要的是乘以COL2數據-1,所以你應該刪除循環和只要把

INSERT INTO TEMP2(COL1,COL2,COL3,COL4) SELECT M.COL1,M.COL2 * -1,M.COL3,M.COl4 FROM MAIN_TABLE;

除了檢查什麼是你想要在那裏GROUP BY M.COL1那裏。

但首先,你應該學習pl/sql語法及其主要概念。