Db2
從游標動態載入 DB2
我們必須使用 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添加到游標定義解決了該問題。