为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:dm8
【操作系统】:win11
【CPU】:
【问题描述】*:要模式下所有表名以及表中数据数量。不会写了,应该如何赋值?
declare
--记录
TYPE record_table is record (table_name varchar(128),cnt bigint);
TYPE v_table IS TABLE OF record_table ;
temp_Change v_table ;
sql varchar;
cnt bigint ;
begin
for rec in (select table_name from dba_tables where owner = '模式名') loop
sql = 'select count(*) from "'||rec.table_name||'"';
execute immediate sql into cnt;
---怎么给temp_Change 嵌套表赋值
commit;
end loop;
select *from table(temp_Change);
end;
SELECT
T2.NAME AS 模式名,
T1.NAME AS 表名,
TABLE_ROWCOUNT(T2.NAME,T1.NAME) AS 行数
FROM
SYSOBJECTS T1,
SYSOBJECTS T2
WHERE
T1.SCHID = T2.ID
AND T1.SUBTYPE$ = 'UTAB'
AND T2."TYPE$" = 'SCH'
ORDER BY 3 DESC;
查询出来直接CREATE TABLE XXXX AS 就行
授人予鱼,不如授鱼与。这个不是问题,是不会。建议给达梦官方文档,让楼主学习。
使用函数返回table类型,不知道是否满足需求
begin
for rec in (select owner,object_name from all_objects where owner='模式名' and object_type='TABLE') loop
begin
execute immediate 'insert into dm_tables select '''|| rec.owner ||''','''|| rec.object_name ||''',count(*) from '|| rec.owner || '.' || rec.object_name;
exception when others then
print rec.owner || '.' || rec.object_name || 'get count error';
end;
end loop;
end;
参考这个