szdl88 2019-04-25 15:21 采纳率: 0%
浏览 363

救救孩子,实现当两张表拥有共同的字段时将两张表相应内容插入第三张表的问题

最近刚接触oracle数据库,想实现如图的效果。
图片说明
表2中的SGID为主键,表3中的SGID为外键。

通过网上查资料,自己写了一个存储过程+动态游标的方法来实现。结果发现不仅新插入的值只会重复插入表1的第一列,连以前表2存在内容也一起重复同步了。
我的代码如下,求大神指点一下如何改进,不胜感激。
CREATE OR REPLACE PROCEDURE P_TEST
IS

--  1. 游标获得 table_1 表数据

  CURSOR T1_CURSOR
  IS     SELECT T.MEMBER,T.MING  FROM table_1 T;

 -- 2. 游标获得 获得table_2 表数据

  CURSOR  T2_CURSOR
  IS     SELECT  T.SGID,T.MING  FROM table_2 T;

BEGIN

  -- 3. 嵌套循环获得需要处理的数据

FOR FOR_T2_CURSOR IN T2_CURSOR

  LOOP


FOR FOR_T1_CURSOR IN T1_CURSOR

  LOOP

 -- 4. 判断

    IF FOR_T1_CURSOR.MING  =  FOR_T2_CURSOR.MING

      THEN

 -- 5. 插入数据

        INSERT INTO table_3 (MEMBER,MING,SGID)

        VALUES(FOR_T1_CURSOR.MEMBER,,FOR_T1_CURSOR.MING,FOR_T2_CURSOR.SGID);

       END IF;

        END LOOP;

        END LOOP;

--6. 结束

END P_TEST;

  • 写回答

1条回答 默认 最新

  • qq_28220633 2019-04-26 10:01
    关注

    存储过程需要定时执行,如下,但感觉建after触发器比较好,
    CURSOR T1_CURSOR IS SELECT T2.SGID SGID,T2.MING MING,T1.MEMBER MEMBER FROM table_2 T2 INNER JOIN table_1 T1 ON T1.MING=T2.MING WHERE T2.SGID NOT IN (SELECT SGID FROM table_3 T3 GROUP BY SGID);
    BEGIN
    FOR FOR_T1_CURSOR IN T1_CURSOR
    LOOP
    INSERT INTO table_3 (MEMBER,MING,SGID)
    VALUES(FOR_T1_CURSOR.MEMBER,,FOR_T1_CURSOR.MING,FOR_T1_CURSOR.SGID);
    END LOOP;
    END ;

    评论

报告相同问题?

悬赏问题

  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料