2012-09-07 35 views
1

Techies-- 儘管我知道我有2行,其中1個在000020上與EMPNO匹配,另一個在000030上,我得到一個空的結果集。有任何想法嗎?DB2:xmlparse/cursor沒有結果集

這裏的電話:

CALL DB2INST1.EMP_MULTIPLE_XML(XMLPARSE(
    DOCUMENT '<EMPLOYEE><EMPNO>000020</EMPNO><EMPNO>000030</EMPNO></EMPLOYEE>')); 

這裏的alterd存儲過程:

BEGIN 

    CREATE PROCEDURE DB2INST1.EMP_MULTIPLE_XML (IN DOC XML) 
    DYNAMIC RESULT SETS 1 
    READS SQL DATA 
    LANGUAGE SQL SPECIFIC EMP_MULTIPLE_XML 

    DECLARE CSR1 CURSOR WITH RETURN FOR 
    SELECT emp.EMPNO, 
      emp.FIRSTNME, 
      emp.LASTNAME, 
      emp.WORKDEPT 
    FROM DB2INST1.EMPLOYEE emp 
    WHERE emp.EMPNO IN 
     (SELECT X.EMPNO FROM 
     XMLTABLE('$d/EMPLOYEE/EMPNO' PASSING DOC AS "d" COLUMNS EMPNO CHAR(6) PATH 'EMPNO') AS X); 

OPEN CSR1; 
END 

回答

0

對於那些在我身後這個主題下面,這裏是存儲過程的作品:

CREATE OR REPLACE PROCEDURE test.INPUT_MULTIPLE_XML (IN DOC XML) 
    DYNAMIC RESULT SETS 1 
    LANGUAGE SQL SPECIFIC INPUT_MULTIPLE_XML 
    BEGIN 
    DECLARE CSR1 CURSOR WITH RETURN FOR  
     select t.type,   
       t.tabschema,   
       t.tabname  
     from syscat.tables t,  
      XMLTABLE('$d/tables/tabname' PASSING DOC AS "d" 
      COLUMNS "TABNAME" VARCHAR(128) PATH '.' ) AS X 
      WHERE X.tabname = t.tabname ;  

    OPEN CSR1; 
    END 
+0

我將在我的答案中留下此示例代碼,因此不需要將其複製到新的單獨答案。 –

1

FETCH似乎沒有必要,考慮到PROC是合格的結果載列的程序。嘗試刪除FETCH及其後的所有內容(除了最後的END)。

在你的XMLTABLE調用的參數'$d/employee'因爲你要的表格輸出的一排爲'$d/employee/empno',不'$d/employee'每次出現不正確。那是什麼導致約項目(),項目()錯誤+

這PROC是一個獨立的示例演示如何實現您通過一組輸入值,通過一個XML文檔參數的目標:

CREATE OR REPLACE PROCEDURE test.INPUT_MULTIPLE_XML (IN DOC XML) 
DYNAMIC RESULT SETS 1 
LANGUAGE SQL 
SPECIFIC INPUT_MULTIPLE_XML 

BEGIN 

DECLARE CSR1 CURSOR WITH RETURN FOR 

    select t.type, 
     t.tabschema, 
     t.tabname 
    from syscat.tables t, 
    XMLTABLE('$d/tables/tabname' PASSING DOC AS "d" 
      COLUMNS "TABNAME" VARCHAR(128) PATH '.' 
    ) AS X 
    WHERE X.tabname = t.tabname 
; 

    OPEN CSR1; 

END 
+0

由於弗雷德 - 狀態傷愈復出在IBM Data Studio中的成功,但我沒有看到下任何結果返回的數據。我通常不會在結果選項卡中看到返回的數據集? – plditallo

+0

大致當我執行這個語句時,我得到2行。我試圖在上面的sproc/call中複製這個結果集:select emp.empno,emp.firstname,emp.workdept from db2inst1.employee emp where emp.empno in(從db2inst1.employee中選擇x.empno x其中x.empno in('000020','000030')); – plditallo

+0

弗雷德 - 謝謝你回答。特別是清理與(+)項交易的情況。在光明的一面,沒有錯誤 - 但仍然沒有結果。 – plditallo