Db2

從游標動態載入 DB2

  • February 17, 2016

我們必須使用 Load From 游標載入許多巨大的表。為其形成的查詢是動態查詢,因為要指定列名。我們在一個過程中使用下面的程式碼做同樣的事情

For Mcnt As Mcur Cursor For 
 Select Di_tablename From file_mapping  Order By Id      
 Do


  For Mcnt1 As Mcur1 Cursor For Select Column_name  From Sysibm.Columns  Where Table_name=di_tablename 
  Do
      Set v_colquery = v_colquery || Column_name || ',' ;   
  End For;           

  Set v_colquery = Substr(v_colquery, 1, Length(v_colquery)-1);

set v_sql ='LOAD FROM (SELECT '|| v_colquery || ' FROM ' || Di_tablename  || ' ) OF CURSOR INSERT INTO ' || Di_tablename || '_LOG  ( ' || v_colquery || ') NONRECOVERABLE';
call admin_cmd(v_sql);   
commit;

END for;

第一輪循環執行得很好。但是當涉及到第二個時,它會給出以下錯誤。

The cursor specified in a FETCH statement or CLOSE statement is not open or a cursor variable in a cursor scalar function reference is not open.. SQLCODE=-501, SQLSTATE=24501, DRIVER=4.18.60

所有游標都是隱式游標(如果我錯了,請糾正我)。不清楚正在引用哪個游標以及究竟是什麼問題。

這是因為使用 Cursor時**Commit

WITH HOLD添加到游標定義解決了該問題。

引用自:https://dba.stackexchange.com/questions/124553