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);
beginfor v_tab in (select table_name fromuser_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 fromzhaobsh
call"GSCLOUD"."ZHAOBSH_PROCEDURE"();select * from zhaobsh order by tablename asc
就能够看到响应的表记录信息了.