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;
欣賞任何指針。
是程序包的程序部分?因爲它聽起來像你第一次運行它可能會得到一個錯誤,說會話狀態清除?或者你沒有得到任何錯誤和成功的電話? – DazzaL
該程序不是任何程序包的一部分。獨立。只要我一遍又一遍地編譯它,沒有錯誤和成功運行。當我重新運行SP而沒有重新編譯時,我沒有收到任何數據。 oracle沒有報告錯誤。 – Rkka
你有沒有一個可重複的簡潔測試用例(即顯示它沒有通過測試sqlplus運行),你可以代替這個示例代碼?就好像你沒有收到會話狀態錯誤一樣,它應該可以正常工作。我測試了10g的代碼,甚至重新編譯它工作得很好(我使用select * from user_objects,其中rownum <= 2作爲我的查詢) – DazzaL