2012-07-24 24 views
1

我是比较新的SQL所以原谅我的无知,PL/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

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

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 
+0

感谢您的答复 - 我得到一个无效的标识符错误不幸 – Marcus 2012-07-24 14:33:53

+0

帮我帮你:你可以发布与每个表中的相关列和几行和预期的结果最小表的说明? :) – 2012-07-24 14:35:42

+0

啊我看到 - 我用ipf_valu(field)替换了srs_ipf(table_name)并获得了我之后的结果。那么我是否可以假设我可以创建某种视图并以这种方式复制数据?再次感谢 – Marcus 2012-07-24 14:46:33

相关问题