2012-12-04 50 views
2

問題:要從我的SP獲得結果,我需要每次重新編譯。Oracle存儲過程需要重新編譯以獲取表數據

SP的用途:在表中的每一行中構造XML。

描述:在第一次運行SP後,SP不會返回任何數據,除非重新編譯,即使表中有有效的行。

我的代碼的輪廓..

qry := 'select * from mytable where flag2 = 0 and flag1 = 1'; 
    qContext := DBMS_XMLGEN.newContext(qry); 
    DBMS_XMLGEN.setrowtag(qContext, 'RowFromDB'); 
    DBMS_XMLGEN.setrowsettag(qContext, 'RowTag'); 
    dbms_xmlgen.setmaxrows(qContext, 1); 
    retXML := ''; 

    loop 
     tmprowxml := DBMS_XMLGEN.getxml(qContext);  
     exit when dbms_xmlgen.getnumrowsprocessed(qContext) = 0;  
     tmprowxml := replace(tmprowxml, '<?xml version="1.0"?>');     
     retXML := retXML || tmprowxml;  

     // code to update flag2 to 1   
    end loop; 

    DBMS_XMLGEN.closecontext(qcontext); 

    COMMIT; 

    return retXML; 

欣賞任何指針。

+0

是程序包的程序部分?因爲它聽起來像你第一次運行它可能會得到一個錯誤,說會話狀態清除?或者你沒有得到任何錯誤和成功的電話? – DazzaL

+0

該程序不是任何程序包的一部分。獨立。只要我一遍又一遍地編譯它,沒有錯誤和成功運行。當我重新運行SP而沒有重新編譯時,我沒有收到任何數據。 oracle沒有報告錯誤。 – Rkka

+0

你有沒有一個可重複的簡潔測試用例(即顯示它沒有通過測試sqlplus運行),你可以代替這個示例代碼?就好像你沒有收到會話狀態錯誤一樣,它應該可以正常工作。我測試了10g的代碼,甚至重新編譯它工作得很好(我使用select * from user_objects,其中rownum <= 2作爲我的查詢) – DazzaL

回答

0

您是否正在刪除並重新創建運行之間的表?遠射,但這會使程序失效。