2014-03-31 26 views
0

我正在寫一個存儲過程,其中我有2個複雜的連接選擇查詢再次外部聯接。結果需要通過存儲過程插入到另一個表中。oracle存儲過程插入通過選擇

您是否看到以下存儲過程語法的任何問題: 對語法的任何幫助都將非常感激。

create or replace 
PROCEDURE STATS_PROCEDURE(
column1 varchar2, 
column2 varchar2, 
column3 varchar2, 
column4 varchar2, 

) IS 
BEGIN 
    insert into STATS_PRODUCT 
     column1 , column2 , column3 , column4) 

     select table1.column1, table1.column2 from 
     (SELECT column1, column2 from table_name) table1 
     FULL OUTER JOIN 
    (select column3, column4 from table_name) table2 
     on 
     table1.column1 = table2.column1 and table1.column2 = table1.column2 
END; 

在此先感謝!

+2

當您嘗試編譯此代碼時會報告哪些錯誤?請**編輯您的問題**幷包含此信息。謝謝。 –

回答

0

在你INSERT子句中已指定4列,但在你的SELECT聲明你做了只有2列,您需要修改您的查詢包括所有4列SELECT像下面

BEGIN 
    INSERT INTO STATS_PRODUCT 
      (column1 
      ,column2 
      ,column3 
      ,column4 
      ) 
      SELECT table1.column1 
        ,table1.column2 
        ,table2.column3 --Added 
        ,table2.column4 --Added 
       FROM (
         SELECT column1 
          ,column2 
         FROM table_name 
         ) table1 
       FULL OUTER JOIN (
            SELECT column3 
             ,column4 
            FROM table_name 
           ) table2 
        ON table1.column1 = table2.column1 
         AND table1.column2 = table1.column2 
END; 

作爲替代你可以使用WITH子句進行重寫,使其更容易閱讀

WITH table1 
      AS (
       SELECT column1 
        ,column2 
       FROM table_name 
      ), 
     table2 
      AS (
       SELECT column1 
        ,column2 
        ,column3 
        ,column4 
       FROM table_name 
      ) 
    INSERT INTO STATS_PRODUCT 
      (column1 
      ,column2 
      ,column3 
      ,column4     
      ) 
      SELECT t1.column1 
        ,t1.column2 
        ,t2.column3 
        ,t2.column4 
       FROM table1 AS t1 
       FULL OUTER JOIN table2 AS t2 
        ON t1.column1 = t2.column1 
         AND t1.column2 = t2.column2