2013-07-19 64 views
0

我需要將DB2表中的某一行乘以18000次。某些列值將保留爲原始值,有些值需要加1。在DB2中插入成千上萬的行

我在DB2中的知識很少,我無法找到關於如何執行此操作的具體簡單答案。有人可以給我一個例子來說明如何實現這個目標嗎?

DB2版本:9.7 /操作系統:Windows 2K8

,比如我有如下表:

T_RES_TABLE 
Col1 |Col2|Col3 |Col4| 
---------------------- 
1 | 1| 1| 1| 

我需要實現的是:

T_RES_TABLE 
Col1 |Col2|Col3 |Col4| 
---------------------- 
1 | 1| 1| 1| - original 
---------------------- 
2 | 1| 2| 1| 
---------------------- 
. 
. 
. 
---------------------- 
18000| 1|18000| 1| 

所以col1和COL3需要增加,其餘的必須保持原樣。希望它很清楚。

+0

使用存儲過程,插入一個循環 – rags

回答

4

您可以使用遞歸查詢,生成新的列值:

$ db2 "create table t_res_table (col1 int, col2 int, col3 int, col4 int)" 
    DB20000I The SQL command completed successfully. 

    $ db2 "insert into t_res_table values (1,1,1,1)" 
    DB20000I The SQL command completed successfully. 

    $ db2 "select * from t_res_table" 

    COL1  COL2  COL3  COL4  
    ----------- ----------- ----------- ----------- 
       1   1   1   1 

     1 record(s) selected. 

    $ db2 "insert into t_res_table \ 
    >with t (col1, col2, col3, col4, lvl) as (\ 
    >select col1, col2, col3, col4, 1 from t_res_table where col1 =1 \ 
    >union all \ 
    >select col1+1, col2, col3+1, col4, lvl+1 from t where lvl <18) \ 
    >select col1, col2, col3, col4 from t where col1 > 1" 
    DB20000I The SQL command completed successfully. 

    $ db2 "select * from t_res_table" 

    COL1  COL2  COL3  COL4  
    ----------- ----------- ----------- ----------- 
       1   1   1   1 
       2   1   2   1 
       3   1   3   1 
       4   1   4   1 
       5   1   5   1 
       6   1   6   1 
       7   1   7   1 
       8   1   8   1 
       9   1   9   1 
       10   1   10   1 
       11   1   11   1 
       12   1   12   1 
       13   1   13   1 
       14   1   14   1 
       15   1   15   1 
       16   1   16   1 
       17   1   17   1 
       18   1   18   1 

     18 record(s) selected. 
2

這會做你的工作。只要根據需要進行更改,更改表名和列名並點擊運行即可。 我不知道你想實現什麼,但是,這聽起來你只需要一張表中的虛擬數據。所以,我只是把它做成虛擬的目的。

修改它爲您的另一個要求。下面的例子包含你所需要的一切,但你可能需要根據這個來修改。

DECLARE @I INT=0 
SET @I=1 
DECLARE @LASTF2 INT 
DECLARE @LASTF4 INT 

SELECT @LASTF2=ISNULL(MAX(F2),1) FROM TEST --JUST CHANGE TEST TO YOUR TABLENAME, AND  F1,F2,F3,F4 
SELECT @LASTF4=ISNULL(MAX(F4),1) FROM TEST -- AS YOUR FIELD NAMES 

WHILE @I<10000 
BEGIN 
    INSERT INTO TEST (F1,F2,F3,F4) 
    VALUES (@I,@LASTF2,@I,@LASTF4) 

    SET @[email protected]+1 
END 
GO 
SELECT * FROM TEST 
+0

這看起來並不像有效的DB2 SQL PL語法。你測試過了嗎? – mustaccio

+0

哦,對不起。我認爲這是SQL。 –

相關問題