2011-11-14 40 views
0

我在Oracle 11g的一個表t_test有兩個領域:多次插入帶有參數的SQL的變量數

CITY NAME 
----- -------------- 
MIAMI JOHN 
MIAMI ERNEST 
MIAMI ERICK 
TAMPA DAN 

我想只用一個INSERT命令,並通過該值插入上查詢多行NAME作爲查詢中的參數。它會是這樣的:

INSERT INTO T_TEST (CITY, NAME) 
SELECT :1,(:2,:3,:4,:5) from dual 

其中參數1將邁阿密,參數2,3,4和5將是不同的名稱。

我已經看到了一些例子,我認爲最好的選擇將是一個unpivot,所以我會有一個子查詢將返回名稱作爲表中的行,但我不知道如何使用不要這樣做。

+0

只是澄清。可能名稱的數量是可變的,我可以根據需要多次擴展一個參數(所以我可以將:2轉換爲:2,:3,:4等),但我無法將其他部分該查詢,所以解決方案作爲多個DECODE不是一個選項。 –

回答

0

沒有看中這裏,只是一個catesian加入(即沒有條件參加)

INSERT INTO T_TEST (CITY,NAME) 
SELECT C.city 
    , N.name 
FROM (SELECT :1 AS city FROM DUAL) C 
    , (SELECT DECODE(LEVEL, 1, :1 
          , 2, :2 
          , 3, :3 
          , 4, :4 
          , 5, :5) AS name 
     FROM DUAL 
     CONNECT BY LEVEL <= 5) N 
+0

對不起,我只是添加了一個註釋添加到問題,所以你的解決方案,而util,不能解決我的問題。在查詢的某個地方,我應該有一個參數:X,我將擴展到:x,:(x + 1),:(:x + 2)等等,以適應所有可能的值。 –

+0

我不知道你可以這樣做。我以爲你總是必須有固定數量的綁定變量。要做你想做的事情,我必須編寫一些動態構建SQL的代碼(即'DECODE'語句),並添加一個變量列表。但我的知識很古老,所以很可能有新的方法來做到這一點。渴望看到會發生什麼。我們感興趣的是,你將什麼語言/平臺嵌入到SQL中? – Sodved