【问题标题】:dynamically generate sql insert statements from results of a query从查询结果动态生成 sql insert 语句
【发布时间】:2015-07-18 03:12:08
【问题描述】:

我必须根据 db2 和 oracle 数据库的查询结果生成一系列插入语句。在实践中来自这样的查询

select g.id from SUV_OWNER.gruppi g 
WHERE EXISTS (SELECT 1 FROM SUV_OWNER.GRUPPIRUOLIPROCEDURE grp WHERE grp.gruppoid=g.gruppoid 
AND GRP.RUOLOID = 50)
AND 
G.CHIAVE LIKE 'ANA%';

它生成一个预先不知道的数字序列作为输出

30000  
30001  
.....  

我必须为每个数字生成一个插入语句

insert into SUV_OWNER.GRUPPIRUOLIPROCEDURE (GRUPPOID, RUOLOID, PROCEDURAID) values  (30000, 141, 7);  
insert into SUV_OWNER.GRUPPIRUOLIPROCEDURE (GRUPPOID, RUOLOID, PROCEDURAID) values  (30001, 141, 7);

我是 sql 新手,如何生成这个插入序列?

感谢您的帮助

【问题讨论】:

  • 您是否介意一种更有效的表单方法,INSERT INTO suv_owner.gruppiruoliprocedure ( ... ) (SELECT .....FROM suv_owner.gruppi g .... )

标签: sql oracle


【解决方案1】:

这很容易。只需使用您现有的查询,并修改您的 SELECT 以将 INSERT 语句与 g.id 值连接起来。

仅供参考:|| 是 Oracle 的字符串连接运算符。我不熟悉 DB2,但我相信它支持连接字符串的相同语法。所以查询应该适用于两个数据库(我希望)。

select 'insert into SUV_OWNER.GRUPPIRUOLIPROCEDURE (GRUPPOID, RUOLOID, PROCEDURAID) values (' || g.id || ', 141, 7);'
from SUV_OWNER.gruppi g 
WHERE EXISTS (
  SELECT 1 
  FROM SUV_OWNER.GRUPPIRUOLIPROCEDURE grp 
  WHERE grp.gruppoid=g.gruppoid 
  AND GRP.RUOLOID = 50)
AND G.CHIAVE LIKE 'ANA%';

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-21
    • 2011-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-02
    • 1970-01-01
    相关资源
    最近更新 更多