2011-11-14 38 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