Sybase ASA имеет набор системных таблиц, предоставляющих информацию о структуре вашей базы данных. Вас интересуют две таблицы: SYSTABLE
(все таблицы) и SYSCOLUMN
(все столбцы).
Я попробовал эту быструю и грязную хранимую процедуру, которая работает для меня (на довольно старой ASA версии 8!). Он создает временную таблицу и курсор для перебора всех таблиц. Для каждой таблицы имя таблицы, количество столбцов и количество строк вставляются во временную таблицу и, наконец, возвращаются.
(Подсказка: tablefilter позволяет вернуть только подмножество всей базы данных, если у вас много таблиц.)
CREATE PROCEDURE Usr_TableStats(in par_tablefilter char(100))
RESULT (tablename varchar(255), number_of_cols int, number_of_rows int)
BEGIN
declare err_notfound exception for sqlstate value '02000';
declare @table_id integer;
declare @tablename varchar(100);
declare @cols integer;
declare @sql varchar(300);
declare tables no scroll cursor for select table_id, table_name from sys.systable where table_type = 'BASE' and table_name like par_tablefilter || '%' order by table_name;
create table #tablestats (
tablename varchar(100) not null,
number_of_cols int not null default 0,
number_of_rows int not null default 0
);
open tables;
LoopTables: loop
fetch next tables into @table_id, @tablename;
if sqlstate = err_notfound then
leave LoopTables
else
SELECT COUNT(column_id) INTO @cols FROM SYSCOLUMN WHERE table_id = @table_id;
set @sql= 'INSERT INTO #tablestats SELECT ''' || @tablename || ''', ' || @cols || ', COUNT(*) FROM ' || @tablename || ';';
EXECUTE IMMEDIATE WITH QUOTES @sql;
end if
end loop LoopTables;
close tables;
SELECT tablename, number_of_cols, number_of_rows FROM #tablestats;
END
Назовите это в iSQL следующим образом:
CALL Usr_TableStats('%'); -- all tables
CALL Usr_TableStats('ADDRESS%'); -- only tables starting with ADDRESS
person
Oliver Jakoubek
schedule
11.07.2013