2015-05-28 42 views
0

我是Oracle的初學者,所以我需要一些幫助。我創建了一個過程:創建一個新的過程

NAMEPROCEDURE 
    (
    p_CodAFD IN VARCHAR2 
    ,p_CodGEN IN VARCHAR2 
    ,p_cursor OUT sys_refcursor 
) 
AS 
BEGIN 


    OPEN p_cursor FOR 
    SELECT 
    to_number(err.id) AS D_ERRORAFD 
    , err.DESCRIPCION AS D_DESCRIPAFD 
    FROM errores err 
    WHERE (p_CodAFD IS NULL OR err.ID = p_CodAFD) 
UNION 
    SELECT 
    to_number(t.CODERRORAFD) AS D_ERRORAFD 
    ,to_number(t.CODERRORGENESIS) AS D_ERRORGEN 
    ,t.DESCRIPCIONERROR AS D_DESCRIPGEN 
    FROM TRADUCTORAGENESISAFD t 
    WHERE t.CODERRORAFD = p_CodAFD 
    AND (p_CodGEN IS NULL OR t.CODERRORGENESIS = p_CodGEN) 
    order by D_ERRORAFD DESC; 

END; 
/

我想你知道它是做什麼的。但它不起作用,第一個SELECT聲明被忽略。但我會告訴你的。

ERRORES表

CODE-AFD DESCRIPTION-AFD 
5466  //SOMEWORDS1 
...  ... 

TRADUCTORGENESISAFD表

CODE-AFD CODE-GEN DESCRIPTION-GEN 
5466  5767  //SOMEWORDS2 
...  ...  ... 
...  ...  ... 

我想獲得

CODE-AFD DESCRIPTION-AFD COD-GEN DESCRIPTION-GEN 
5466  //SOMEWORDS1  5767  //SOMEWORDS2 
...   ...    ...  ... 

我是否需要使用內部連接。如果是這樣。怎麼樣?

+1

當你說第一個'SELECT'被忽略時,你是什麼意思?你是否收到一條語句被忽略的錯誤?您的查詢是否未返回您期望的結果?你的數據是什麼樣子的,參數的值是什麼?你實際得到的結果是什麼? –

+0

@JustinCave完成,我剛剛編輯。 –

回答

1

當你懷疑,看來你需要使用一個連接:

SELECT to_number(e.ID) AS "CODE-AFD", 
     e.DESCRIPCION AS "DESCRIPTION-AFD", 
     t.CODERRORGENESIS AS "CODE-GEN", 
     t.DESCRIPCIONERROR AS "DESCRIPTION-GEN" 
    FROM errores e 
    INNER JOIN TRADUCTORAGENESISAFD t 
    ON t.CODERRORAFD = e.ID 
    WHERE e.ID = NVL(p_CodAFDm e.ID) 
    order by t.CODERRORAFD DESC 

好運。