【问题标题】:PL/SQL Copy/insert multiple rows to one row in another tablePL/SQL 复制/插入多行到另一表的一行
【发布时间】:2012-07-24 14:15:41
【问题描述】:

我对 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 服务器上。

提前致谢

【问题讨论】:

    标签: sql oracle plsql insert


    【解决方案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
    

    【讨论】:

    • 感谢您的回复 - 不幸的是,我收到了无效的标识符错误
    • 帮帮我:您能否发布一个包含相关列和每个表中的几行以及预期结果的最小表描述? :)
    • 啊,我明白了 - 我已经用 srs_ipf (table_name) 替换了 ipf_valu (field) 并得到了我想要的结果。那么我可以假设我可以创建某种视图并以这种方式复制数据吗?再次感谢
    • 你说得对,我对列名感到困惑。如果此选择返回您希望插入的行,那么您可以INSERT INTO (SELECT ...)(不需要视图)
    • 文森特你是个天才——非常感谢你的帮助。只需克服我的序列增量问题,我就会离开。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-15
    • 1970-01-01
    • 2021-12-28
    • 2015-04-13
    • 1970-01-01
    • 2017-11-23
    • 1970-01-01
    相关资源
    最近更新 更多