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
就能够看到响应的表记录信息了.