• Oracle 以及 达梦数据库简单查询所有表行数的存储过程


    1. 今天有一个场景需要查询一个数据库实例下面所有的表的行数.

    本来想查询 user_tables 视图 但是发现 这个视图里面 达梦数据库 里面存的是null的..

    百度之后发现一个解决方案是 使用存储过程, 然后简单进行了一下修改, 在产品部 胡平老师的帮助下实现了.

    方法为:

    1. 创建一个空表

    create table zhaobsh (tablename varchar(200),tablenum varchar(200));

    一个存储表名 一个存储列数

    2. 根据百度修改了一下 创建一个存储过程

    备注 发现有人弄了很多 _ 开头的备份表 发现这些备份表会报错, 没办法 找了一下语法 排除所有 带_ 的表.

    另外发现能创建 一个float的数据库表很神奇 编译过程中不报错, 调用过程中会报错 drop table 还drop不了 只能通过gui的方式删除..

    神奇. 

    create or replace PROCEDURE  zhaobsh_procedure
    IS
    declare
    
      v_sql varchar2(200);
    
      v_cnt number(10);
    
    begin
    
      for v_tab in (select table_name from user_tables t where table_name not like '%a_%'  ESCAPE 'a'  ) loop
    
        v_sql := 'select count(*) from '|| v_tab.table_name;
    
        execute immediate v_sql into v_cnt;
    
         insert into zhaobsh values (v_tab.table_name,v_cnt);
    
      end loop;
    
    end;
    /

    3. 然后执行存储过程的调用. 

     可以先清理一下环境.

    delete from zhaobsh
    
    call "GSCLOUD"."ZHAOBSH_PROCEDURE"();
    
    select * from zhaobsh order by tablename asc 

    就能够看到响应的表记录信息了. 

  • 相关阅读:
    面试技巧
    JDK1.8新特性(一): 接口的默认方法default
    idea2019.2安裝MybatisCodeHelper插件
    为什么要拆掉“烟囱式”系统
    git
    springboot-使用AOP日志拦截实现
    为何放弃Eclipse,选择IntelliJ IDEA,看完终于明白了
    StringUtils.isBlank()的使用
    count(1)、count(*)、count(字段)的区别
    关于redis中zset底层跳表的理解
  • 原文地址:https://www.cnblogs.com/jinanxiaolaohu/p/12664800.html
Copyright © 2020-2023  润新知