PL / SQL复制/在另一个表中将多行插入一行

时间:2012-07-24 14:15:41

标签: sql oracle plsql insert

我对SQL比较陌生,请原谅我的无知......

我有三个表,SRS_CAP,SRS_IPF和SRS_URA。

我想将数据从SRS_IPF复制到SRS_URA,其中(某些)SRS_IPF的主键与SRS_CAP的主键相同。

具体来说,这是我出现问题的地方,我想将SRS_IPF中的多行复制到SRS_URA中的一行。下面的脚本说明了我想要实现的目标,但不打算工作 - 必须有一个更有效的方法(实际上有效的方法!):

INSERT INTO srs_ura
        (ura_stuc, ura_seqn, ura_stat, ura_name, ura_orgn, ura_add1)
SELECT ipf_ipuc, mySEQ, 'GP',
      (SELECT ipf_valu
                  FROM srs_ipf
                 WHERE ipf_code = 'IPQ_REF1TIT'
                   AND ipf_ippc = CAP_MCRC
                   AND ipf_ipuc = CAP_STUC),
      (SELECT ipf_valu
                  FROM srs_ipf
                 WHERE ipf_code = 'IPQ_REF1ORG'
                   AND ipf_ippc = CAP_MCRC
                   AND ipf_ipuc = CAP_STUC,
      (SELECT ipf_valu
                  FROM srs_ipf
                 WHERE ipf_code = 'IPQ_REF1AL1'
                   AND ipf_ippc = CAP_MCRC
                   AND ipf_ipuc = CAP_STUC)
 FROM srs_ipf, srs_cap
 WHERE ipf_ippc = CAP_MCRC AND ipf_ipuc = CAP_STUC; 

如您所见 - 我想重复将ipf_valu字段插入srs_ura中的多个列,但srs_ipf中同一行的ipf_code不同。

所以我的问题是,我应该研究哪些SQL编程领域,以实现上述目标?

我还有关于自动排序和NCLOB的更多问题,但我稍后会解决这些问题。我在Oracle服务器上。

提前致谢

1 个答案:

答案 0 :(得分:1)

此选择是否返回要插入的行?

SELECT ipf_ipuc, /*mySEQ,*/ 'GP',
       MAX(CASE WHEN ipf_code = 'IPQ_REF1TIT' THEN ipf_valu END),
       MAX(CASE WHEN ipf_code = 'IPQ_REF1ORG' THEN ipf_valu END),
       MAX(CASE WHEN ipf_code = 'IPQ_REF1AL1' THEN ipf_valu END)
 FROM srs_ipf, srs_cap
 WHERE ipf_ippc = CAP_MCRC AND ipf_ipuc = CAP_STUC
   AND ipf_code IN ('IPQ_REF1TIT', 'IPQ_REF1ORG', 'IPQ_REF1AL1')
 GROUP BY ipf_ipuc