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 ;

    评论

报告相同问题?

悬赏问题

  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办
  • ¥15 kylin启动报错log4j类冲突
  • ¥15 超声波模块测距控制点灯,灯的闪烁很不稳定,经过调试发现测的距离偏大
  • ¥15 import arcpy出现importing _arcgisscripting 找不到相关程序