Чтобы получить матрицу, которая вам «нужна», попробуйте это:
> dat <- matrix(
data = c(0,0,0,1, 1,0,0,0,0,0,0,0,2,0,0,2,3,1,0,0),
nrow = 4,
ncol = 5
)
> dat
[,1] [,2] [,3] [,4] [,5]
[1,] 0 1 0 2 3
[2,] 0 0 0 0 1
[3,] 0 0 0 0 0
[4,] 1 0 0 2 0
> dat[rowSums(dat) > 0, colSums(dat) > 0]
[,1] [,2] [,3] [,4]
[1,] 0 1 2 3
[2,] 0 0 0 1
[3,] 1 0 2 0
Сгенерируйте сценарий для усечения (= удаления всех строк из) всех таблиц:
select 'truncate table ' || table_name || ';' from user_tables
И затем выполните сценарий.
Клонировать схему, а затем удалить старые таблицы?
Небольшая разница в ответе Andomar об усечении всех таблиц для конкретного пользователя, а не только таблиц текущего пользователя:
SELECT 'TRUNCATE TABLE ' || owner || '.' || table_name || ';' FROM all_tables WHERE owner = 'user/schema'
Заменить бит user/schema
выше на имя пользователя / схемы (между кавычками) вас интересует.
Чтобы решить проблему ограничений, должно работать что-то вроде этого:
BEGIN
FOR T in (SELECT table_name FROM user_tables) LOOP
EXECUTE IMMEDIATE 'ALTER TABLE '||T.table_name||' DISABLE ALL CONSTRAINTS';
END LOOP;
FOR T in (SELECT table_name FROM user_tables) LOOP
EXECUTE IMMEDIATE 'TRUNCATE TABLE '||T.table_name;
END LOOP;
FOR T in (SELECT table_name FROM user_tables) LOOP
EXECUTE IMMEDIATE 'ALTER TABLE '||T.table_name||' ENABLE ALL CONSTRAINTS';
END LOOP;
END;
Потенциальный недостаток усечения состоит в том, что он может дать сбой при ограничениях ссылочной целостности. Итак, вам нужно сначала отключить ограничения внешнего ключа, затем выполнить усечение, а затем снова включить ограничения. «Плюс» клонирования схемы (exp и imp) заключается в том, что вы также можете отбросить и воссоздать табличное пространство (что вы можете сделать, если хотите освободить некоторое физическое дисковое пространство в результате удаления всех данных).