具有可变数量的参数SQL的多次插入
Posted
技术标签:
【中文标题】具有可变数量的参数SQL的多次插入【英文标题】:Multiple insert with variable number of parameters SQL 【发布时间】:2011-11-14 02:52:28 【问题描述】:我在 Oracle 11g 上有一个表 t_test,其中包含两个字段:
CITY NAME
----- --------------
MIAMI JOHN
MIAMI ERNEST
MIAMI ERICK
TAMPA DAN
我想只使用一个插入命令在该查询中插入多行,并将NAME
的值作为查询中的参数传递。应该是这样的:
INSERT INTO T_TEST (CITY, NAME)
SELECT :1,(:2,:3,:4,:5) from dual
其中参数 1 是迈阿密,参数 2、3、4 和 5 是不同的名称。
我已经看到了一些示例,我认为最好的选择是 unpivot,所以我会有一个子查询将名称作为表中的行返回,但我不知道如何使用 unpivot这样做。
【问题讨论】:
只是一个澄清。可能名称的数量是可变的,我可以根据需要多次扩展参数(因此我可以将:2 转换为:2、:3、:4 等),但我不能将其他部分相乘查询,因此不能选择多个 DECODE 的解决方案。 【参考方案1】:这里没什么特别的,只是一个 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
【讨论】:
对不起,我只是添加了一个注释添加到问题中,所以你的解决方案,而 util,并不能解决我的问题。在查询中的某个位置,我应该有一个参数:X,我将其扩展为:x、:(x+1)、:(x+2)等,以容纳所有可能的值。 我不知道你能做到这一点。我以为你总是必须有固定数量的绑定变量。为了做你想做的事,我必须编写一些动态构建 SQL 的代码(即DECODE
语句),并且还添加了一个变量列表。但是我的知识很老,所以很可能有新的方法来做到这一点。热衷于看看会发生什么。我们感兴趣的是,您将 SQL 嵌入到什么语言/平台中?以上是关于具有可变数量的参数SQL的多次插入的主要内容,如果未能解决你的问题,请参考以下文章