2017-07-07 32 views
-1

table1的另一表1:如何動態插入列值成表2 SELECT * FROM其具有比表2的一列少

t1_column1 t1_column2 t1_column3 
1   2   3 
2   3   4 

table2 is : 

t2_column1 t2_column2 t2_column3 t2_column4 
1   2   3    0 
2   3   4    0 

在這裏,我傳遞值作爲函數參數,但是當我 嘗試創建此函數時出現此錯誤:錯誤(11,7): PL/SQL:SQL語句被忽略並且錯誤(11,108):PL/SQL:ORA-00917: 缺少逗號

CREATE OR REPLACE FUNCTION NEW_PURCHASE(GODOWN_CODE IN VARCHAR2,MON IN 
VARCHAR2) 
    RETURN VARCHAR2 IS 
    var_mon VARCHAR2(100); 
    PRAGMA AUTONOMOUS_TRANSACTION; 

BEGIN 
var_mon:=MON; 

    INSERT INTO table2 
(t2_column1, t2_column2, t2_column3, var_mon) 
SELECT t1_column1, t1_column2, t1_column3 
FROM table1 WHERE t1_column1=GODOWN_CODE; 
    DELETE FROM table1 WHERE t1_column1=GODOWN_CODE; 

    COMMIT;   
    RETURN 'done'; 
END NEW_PURCHASE; 
+0

't2.mon作爲var_mon'這是不對的 – XING

+0

它應該工作。還有你最後一個問題發生了什麼。你沒有接受任何答案而關閉它。 – XING

+0

沒有必要在插入語句中使用列別名。正如@XING所說的't2.mon as var_mon'是錯誤的。只需從插入列列表和選擇列列表中刪除列別名即可。 – BriteSponge

回答

0

試試這個:

CREATE OR REPLACE FUNCTION NEW_PURCHASE (GODOWN_CODE IN VARCHAR2, 
             MON   IN VARCHAR2) 
    RETURN VARCHAR2 
IS 
    --var_mon VARCHAR2 (100); 
    PRAGMA AUTONOMOUS_TRANSACTION; 
BEGIN 
    --var_mon := 'MON'; 

    INSERT INTO table2 (t2_column1, 
         t2_column2, 
         t2_column3, 
         t2_column4) 
     SELECT t1_column1, t1_column2, t1_column3, mon   
     FROM table1 
     WHERE t1_column1 = GODOWN_CODE; 

    DELETE FROM table1 
     WHERE t1_column1 = GODOWN_CODE; 

    COMMIT; 
    RETURN 'done'; 
END NEW_PURCHASE; 

需要注意的是,如果你在一個functionDML操作,cannotselect語句調用它,您將需要一個PLSQL塊來運行它。

對於前:

您可以按照以下稱之爲:

declare 
    l_message varchar2(30); 
begin 
    l_message := test_func('123'); 
end; 

...但不喜歡這樣的:

select test_func(empno) from emp; 
+0

@BharathPateru。檢查更新回答 – XING

+0

用這個我可以在t2_column4中插入mon值嗎?在這裏,我認爲'MON'是字符串,但是我想在表2中插入MON參數值。t2_column4 –

+0

'MON'不是一個字符串。它是你傳遞的價值。不要在沒有嘗試解決方案的情況下發布任何回覆,並且在發佈任何問題後也不要發帖 – XING