我一直在解決一個問題幾天。我將一個使用Sybase的Unix腳本轉換爲在DB2中運行,並且在它的中間有一個循環。如何在中間執行一個循環的DB2查詢序列?
該腳本包含多個臨時表和更新語句,它們依賴於它之前的內容......後面是一個循環,然後是一些更多的臨時表,更新語句等......在最後的查詢之前填充最終結果並將其導出到電子表格。
我遇到的問題是我可以同時運行聲明,插入,更新和選擇查詢塊。但是,當我試圖在中間循環中一次運行它時,出現以下錯誤: 「SQL0104N在」ssion.min_assessment「後面找到了一個意外標記」END-OF-STATEMENT「。預期標記可能包含:「JOIN」。LINE NUMBER = 1。SQLSTATE = 42601「。
當單獨運行時,塊運行正常......但我需要所有塊一起運行,以便我可以將它們放置在要安排的unix腳本中。
的結構是這樣的:
Declare temp_table_a;
Insert into temp_table_a (select ... from <table> where ...);
Declare temp_table_b;
Insert into temp_table_b (select ... from temp_table_a, <table> where ...);
Update temp_table_b set <field> = (select <field> from <table> where ...);
Delete temp_table_b where ...;
Declare temp_table_c;
Declare temp_table_d;
Begin Atomic
FOR V1 AS
Select ... From temp_table_b
DO
Delete temp_table_c;
Insert into temp_table_c (select ...);
Delete temp_table_b Where Exists (Select 1 From temp_table_c);
Update temp_table_d set <date_field> = temp_table_c.<date_field> where exists (Select 1 from temp_table_b where ...);
Delete temp_table_c where exists (Select 1 from temp_table_c where ...);
Insert into temp_table_d Select ... From temp_table_c;
END FOR;
END
Declare temp_table_e;
Insert into temp_table_e (select ... from temp_table_d, <table> where ...);
Update temp_table_e set <field> = (select <field> from <table> where ...);
Select ... from temp_table_e;
沒有人有任何想法,我能做些什麼來讓所有的查詢塊按順序運行,包括循環?