Oracle循环读取表一并与其他对应表中数据是否相等,不相等EXCEPTION异常提示该表实际记录条数与记录不符,程序终止退出

要求
循环读取RESULT_TABLE中的tablename,tablecount值与 a b c作比较、
判断test.tablename与 对应表中数据是否相等,不相等EXCEPTION异常提示该表实际记录条数与记录不符,程序终止退出

代码

declare 
    --声明一个变量——存放数字
      n varchar2(238);
      nn varchar2(238);
      a varchar(4000);
      aa varchar(4000);
      b number;
      bb number;
      
    --声明一个记录类型
    type test_record is record(
         v_tname test.tablename%type,
         v_tcount test.tablecount%type
    );
    --声明一个记录类型变量
    v_test_record test_record;
    --定义游标
    cursor test_tname_cursor is select tablename,tablecount from test;
    --游标取到的第一行的数据
    rtype test_tname_cursor%rowtype;
begin
    --对游标进行for循环
    for rtype in test_tname_cursor loop
        --测试是否取到数据 
        dbms_output.put_line(' tablname : ' || rtype.tablename|| ' tablecount : '||rtype.tablecount);
    end loop;
    --查看原表数据,没有数据则报错提示
    nn := 'select count(1) from test ';
    execute immediate nn into bb;
    dbms_output.put_line(bb);
    if  bb = 0 then
           raise_application_error('lserror2','测试无数据');
    end if;
    for rtype in test_tname_cursor loop
        --a := rtype.tablename;
        --b := i.tablecount;
        n := 'select count(1) from '||rtype.tablename;
        --测试是否取到数据
        --dbms_output.put_line('a : '||a);
        --dbms_output.put_line(b);
        dbms_output.put_line(n);
        --execute immediate n;
        execute immediate n into b;
        dbms_output.put_line(b|| '  '||rtype.tablecount);
        if b != rtype.tablecount then
           raise_application_error('lserror1','参数不相等');
        end if;
    end loop;
EXCEPTION
when others then
   dbms_output.put_line('数据不一致');
end;

关于test -----a-----b-----三张表

在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_42157992/article/details/100018647