Oracle使用存储过程+动态游标cursor双重嵌套实现当两张表拥有共同的字段时将字段插入第三张表

Oracle使用存储过程+动态游标cursor双重嵌套实现当两张表拥有共同的字段时将字段插入第三张表 -----‘两种写法’
方法一:

方法头:

  /*1,要求使用存储过程实现
  2,无传入参数,一个返回参数,插入成功返回S,发生异常返回E
  3,要求使用动态游标Cursor
  */

  PROCEDURE TEST_LLP_FOUR(X_RETURN_MSG OUT VARCHAR2);

方法体:

    -- 存储过程demo04
    PROCEDURE TEST_LLP_FOUR(X_RETURN_MSG OUT VARCHAR2) IS
    --  1. 游标获得 TEST_USER_PHONE 表数据
      CURSOR P_CURSOR 
      IS     SELECT  T.ID,T.USERNAME,T.PHONE  FROM TEST_USER_PHONE T;
     -- 2. 游标获得 获得test_user_validate_phone 表数据
      CURSOR  TUVP_CURSOR
      IS     SELECT  T.ID,T.USERNAME,T.PHONE  FROM test_user_validate_phone T;
      

      
      
    BEGIN
      -- 3. 嵌套循环获得需要处理的数据
    FOR FOR_TUVP_CURSOR IN TUVP_CURSOR
      LOOP
        
    FOR FOR_P_CURSOR IN P_CURSOR
      LOOP
              -- 4. 判断
        IF FOR_P_CURSOR.PHONE  =  FOR_TUVP_CURSOR.PHONE
          THEN            
            -- 5. 插入数据
            INSERT INTO test_user_total_phone 
            VALUES(FOR_P_CURSOR.ID,FOR_P_CURSOR.USERNAME,FOR_P_CURSOR.PHONE);
            X_RETURN_MSG :='S';
            END IF;
            END LOOP;   
            END LOOP;  
            -- 6. 抛出异常
     EXCEPTION
        WHEN OTHERS THEN
            X_RETURN_MSG := 'E';
            --7. 结束
 END TEST_LLP_FOUR;
方法二:

方法头:

  /*1,要求使用存储过程实现
  2,无传入参数,一个返回参数,插入成功返回S,发生异常返回E
  3,要求使用动态游标Cursor
  */   
PROCEDURE TEST_LLP_FOUR_TWO(X_RETURN_MSG OUT VARCHAR2);

方法体:

 
 -- 方法二
    PROCEDURE TEST_LLP_FOUR_TWO(X_RETURN_MSG OUT VARCHAR2) IS
      -- 声明变量1
      P_ONE_ID        TEST_USER_PHONE.ID%TYPE;
      P_ONE_USERNAME  TEST_USER_PHONE.USERNAME%TYPE;
      P_ONE_PHONE     TEST_USER_PHONE.PHONE%TYPE;
     
     -- 声明游标1
       CURSOR P_CURSOR IS     
       SELECT  T.ID,T.USERNAME,T.PHONE  FROM TEST_USER_PHONE T;
   
      -- 声明变量2
      P_TWO_ID        test_user_validate_phone.ID%TYPE;
      P_TWO_USERNAME  test_user_validate_phone.USERNAME%TYPE;
      P_TWO_PHONE     test_user_validate_phone.PHONE%TYPE;
      
      
      -- 声明游标2
       CURSOR P_TWO_CURSOR IS     
       SELECT  T.ID,T.USERNAME,T.PHONE  FROM test_user_validate_phone T;
     
     BEGIN
    
    -- 打开游标
    OPEN P_CURSOR; 
    
     -- 遍历游标1
    LOOP
      FETCH P_CURSOR INTO P_ONE_ID,P_ONE_USERNAME,P_ONE_PHONE;
      EXIT WHEN P_CURSOR%NOTFOUND;
     OPEN P_TWO_CURSOR;
     -- 遍历游标2
    LOOP
      FETCH P_TWO_CURSOR INTO P_TWO_ID,P_TWO_USERNAME,P_TWO_PHONE;  
      EXIT WHEN  P_TWO_CURSOR%NOTFOUND;
      -- 判断
     IF P_ONE_PHONE = P_TWO_PHONE THEN  
     INSERT INTO TEST_USER_TOTAL_PHONE 
       VALUES(P_TWO_ID,P_TWO_USERNAME,P_TWO_PHONE);
        X_RETURN_MSG :='S';  
          END IF; 

    END LOOP;
    END LOOP;
     --关闭游标2
    CLOSE P_TWO_CURSOR;
    CLOSE P_CURSOR;   
         EXCEPTION
        WHEN OTHERS THEN
            X_RETURN_MSG := 'E';
       
 END TEST_LLP_FOUR_TWO;
    
    
  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值