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

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

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐