現在有兩張臨時表,表A有25條資料,表B有588條資料,目標是將表A中的每條資料和表B中的每條資料組合成一條新的資料存入表C中,照道理,應該會有25*588=14700條資料,因為涉及到調差,所以我采用了游標,并使用雙層for回圈來組合資料,出來的結果總是25*25*588= 367500條資料,請問這是怎么回事?
uj5u.com熱心網友回復:
uj5u.com熱心網友回復:

如上兩圖,采用的一個存盤程序呼叫另一個存盤程序的方式
uj5u.com熱心網友回復:
select * from a,b這條陳述句就可以生成25*588條符合你的要求的資料uj5u.com熱心網友回復:
沒看懂你什么意思,建議貼出完整的代碼uj5u.com熱心網友回復:
首先樓上正解,只需要select * from a,b,得出的就是a表和b表的笛卡爾積。然后雖然沒有看到你所有的代碼,但是猜測一下,你的第一個存盤過沒有問題,但是第二個的時候

注釋里的控制回圈數量,可以認為你下面有個回圈是用這個數量來控制回圈結束的,但是你接著又寫了一個for游標的回圈,這說明,你的第二個存盤程序有兩個回圈,加上第一個存盤程序的一個回圈,剛好25*25*588= 367500,如果你說的25條資料的表是FSOBRANCHD_T這張表的話,那應該就是這樣沒錯了。
uj5u.com熱心網友回復:
第二個存盤程序里的控制回圈的變數,是在下面的邏輯里做了一個if、else判斷,并且在游標打開之前獲取的,這樣會有影響嗎?謝謝
uj5u.com熱心網友回復:
for policyCur in policyCursor loop 本身就是一個回圈,而且是控制回圈次數的那種,次數就是policyCuersor存盤資料的行數。你的if else是判斷什么的?V_count的大小是FSOBRANCHD_T的行數,和policyCuersor的行數是一個值。不是重復了嗎
要是不是我理解的這樣就貼出所有的代碼。
uj5u.com熱心網友回復:
這么點資料量,還寫回圈干嘛,直接插入就可以了。insert into C表 select 這里寫A表和B表的相應欄位,順序要和C表的欄位一致,每個欄位逗號分隔。 from A表,B表;
commit;
uj5u.com熱心網友回復:
把 A表b表的資料插入新的表中用觸發器做好一點轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/86418.html
標籤:基礎和管理
