具有可变数量的参数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的多次插入的主要内容,如果未能解决你的问题,请参考以下文章

Python itertools.product 具有可变数量的参数

为具有可变数量参数的不同函数编写通用包装器

在T-SQL中具有可变数量的搜索条件的LIKE运算符

Spark Sql udf,参数数量可变

C 编译器如何实现具有可变数量参数的函数?

Python C++ API - 具有可变数量参数的重载函数