ドロップして再作成せずに、foreginキーを使用してdb2データベース内のすべてのテーブルをドロップしたいと思います。
15700 次
3 に答える
7
すべてのビュー、インデックス、外部キーなども削除する場合:
select 'drop index "' || TRIM(INDSCHEMA) || '"."' || TRIM(INDNAME) || '";'
from SYSCAT.INDEXES
where UNIQUERULE = 'D'
and INDSCHEMA = (select current schema from SYSIBM.SYSDUMMY1);
select 'alter table "' || TRIM(TABSCHEMA) || '"."' || TRIM(TABNAME) || '" drop foreign key "' || TRIM(CONSTNAME) || '";'
from SYSCAT.TABCONST
where TYPE = 'F'
and TABSCHEMA = (select current schema from SYSIBM.SYSDUMMY1)
select 'alter table "' || TRIM(TABSCHEMA) || '"."' || TRIM(TABNAME) || '" drop unique "' || TRIM(INDNAME) || '";'
from SYSCAT.INDEXES
where UNIQUERULE = 'U'
and INDSCHEMA = (select current schema from SYSIBM.SYSDUMMY1);
select 'alter table "' || TRIM(TABSCHEMA) || '"."' || TRIM(TABNAME) || '" drop primary key;'
from SYSCAT.INDEXES
where UNIQUERULE = 'P'
and INDSCHEMA = (select current schema from SYSIBM.SYSDUMMY1);
select 'drop table "' || TRIM(TABSCHEMA) || '"."' || TRIM(TABNAME) || '";'
from SYSCAT.TABLES
where TYPE = 'T'
and TABSCHEMA = (select current schema from SYSIBM.SYSDUMMY1);
select 'drop view "' || TRIM(TABSCHEMA) || '"."' || TRIM(TABNAME) || '";'
from SYSCAT.TABLES
where TYPE = 'V'
and TABSCHEMA = (select current schema from SYSIBM.SYSDUMMY1);
于 2015-09-11T09:18:51.803 に答える
3
LinuxまたはUnix環境を使用している場合。
#!/bin/ksh
## load profile of your instance owner
db2 "connect to <db_name">
db2 -x "select tabschema,tabname from syscat.tables where type='T' and tabschema not like 'SYS%' with ur"|while read a b
do
db2 "load from /dev/null of del replace into $a.$b nonrecoverable"
done
return 0
このスクリプトは、データをテーブルに削除します。
于 2011-11-24T11:50:18.130 に答える
2
db2 "Select 'DROP TABLE ', tabname, ';' from syscat.tables where owner='DBUSER'" >> filename
ファイルの最初の行と最後の行を削除し、次を使用して実行します。
db2 -tvf filename.
このようにして、削除したテーブルのログを保存することもできます。
PS:一度、必要なテーブルだけがファイルに存在することを確認してください。誤って、いくつかのシステムテーブルを削除しないでください。
于 2012-10-29T07:13:58.063 に答える