2017-07-05 71 views
-3

我試圖插入行到table1中select * from table2,最後使用oracle sql開發者中的函數刪除table2中的行。我沒有得到如何去做。insert into table1 select * from another table2,then delete the row from table2

follwing是我的函數:

create or replace FUNCTION DELETEROW(GODOWN_DIST_CODE IN 
TEST_TABLE.GODOWN_DIST_CODE%TYPE) return varchar2 
AS 
returned_value varchar2(50); 
BEGIN 
begin 
INSERT INTO TEST_TABLE_BACKUP SELECT * FROM TEST_TABLE WHERE 
GODOWN_DIST_CODE=GODOWN_DIST_CODE; 
DELETE TEST_TABLE WHERE GODOWN_DIST_CODE = GODOWN_DIST_CODE; 

INSERT INTO NEW_TABLE_BACKUP SELECT * FROM NEW_TABLE WHERE GODOWN_DIST_CODE 
= GODOWN_DIST_CODE; 
DELETE FROM NEW_TABLE WHERE GODOWN_DIST_CODE = GODOWN_DIST_CODE; 

exception 
WHEN no_data_found THEN 
     returned_value := '#'; 
end; 
RETURN returned_value;  
END; 
+1

顯示你曾試圖迄今未工作或提供錯誤的結果觀衆。 – XING

+1

你不能在'PROCEDURE'裏面使用'RETURN'。如果你想返回一些東西,你需要創建'FUNCTION'。 'FUNCTION'和'PROCEDURE'是兩個不同的東西。 –

+0

@XING,我已經創建了上面的函數,當我執行函數時,所有的行都被插入到TEST_TABLE_BACKUP和NEW_TABLE_BACKUP中,但是我傳遞了一些值作爲參數,並將其用作where條件,甚至所有記錄都被刪除。 –

回答

0

根據我們的討論中,我提出這個解決方案爲您服務。即使我沒有發現任何需要有FUNCTION上午顯示使用FUNCTION exmaple。此外,我已將您的刪除邏輯寫入Procedure,並且取決於刪除語句的成功,將Return值置於變量var中並作爲OUT paramater發送,您可以使用該值。

功能:

CREATE OR REPLACE FUNCTION confirm_ckh 
    RETURN VARCHAR 
AS 
BEGIN 
    RETURN ('#'); 
END; 

步驟:

CREATE OR REPLACE PROCEDURE DELETEROW (
    GODOWN_DIST_CODE IN TEST_TABLE.GODOWN_DIST_CODE%TYPE, 
    var OUT varchar2) <-- Out parameter to get the return value 
AS 

BEGIN 
    BEGIN 
     INSERT INTO TEST_TABLE_BACKUP 
     SELECT * 
      FROM TEST_TABLE 
      WHERE GODOWN_DIST_CODE = GODOWN_DIST_CODE; 

     IF SQL%ROWCOUNT > 0 
     THEN 
     DBMS_OUTPUT.put_line ('Insert Success TEST_TABLE_BACKUP'); 
     var:=confirm_ckh; 
     END IF; 

     DELETE TEST_TABLE 
     WHERE GODOWN_DIST_CODE = GODOWN_DIST_CODE; 

     IF SQL%ROWCOUNT > 0 
     THEN 
     DBMS_OUTPUT.put_line ('Deleted records from TEST_TABLE '); 
     var:=confirm_ckh; 
     END IF; 


     INSERT INTO NEW_TABLE_BACKUP 
     SELECT * 
      FROM NEW_TABLE 
      WHERE GODOWN_DIST_CODE = GODOWN_DIST_CODE; 

     IF SQL%ROWCOUNT > 0 
     THEN 
     DBMS_OUTPUT.put_line ('Insert Success for NEW_TABLE_BACKUP'); 
     var:=confirm_ckh; 
     END IF; 

     DELETE FROM NEW_TABLE 
      WHERE GODOWN_DIST_CODE = GODOWN_DIST_CODE; 

     IF SQL%ROWCOUNT > 0 
     THEN 
     DBMS_OUTPUT.put_line ('Deleted records from NEW_TABLE '); 
     var:=confirm_ckh; 
     END IF; 
    EXCEPTION 
     WHEN NO_DATA_FOUND 
     THEN 
     null; 
    END; 
END; 
0

試試這個: -

CREATE OR REPLACE PROCEDURE TABLE2_TO_TABLE1 
    IS 
    BEGIN 
    EXECUTE IMMEDIATE 'INSERT INTO TABLE1(
       Field1, 
       Field2, 
       Field3 
      ) 
      SELECT Field1, 
        Field2, 
        Field3 
        FROM TABLE2'; 
    EXECUTE IMMEDIATE 'DELETE TABLE2 where rownum != 0'; 
END TABLE2_TO_TABLE1; 

執行過程

BEGIN 
    TABLE2_TO_TABLE1; 
END; 
/
相關問題