これからの季節に親子でハイキング! >>

さきほどと似たような質問ですみません。

SQLコマンドであるデータベースの全テーブルを削除したいんですが、
truncate一文ですませる方法はないでしょうか。

それとも、一行ずつ
truncate tableA
truncate tableB
....


とやっていくしかないのでしょうか?

このQ&Aに関連する最新のQ&A

A 回答 (3件)

declare


CURSOR CUR1 IS SELECT * FROM USER_TABLES;
begin
FOR CUR_RECORD IN CUR1 LOOP
EXECUTE IMMEDIATE 'TRUNCATE TABLE "'||CUR_RECORD.TABLE_NAME||'"';
END LOOP;
end;
exit
/
というPL/SQLスクリプトを投入すれば、自己所有のテーブルは空に出来ます。
有無を言わさずに空になるので、気を付けてくださいね。
    • good
    • 0
この回答へのお礼

ありがとうございます!
これはとても助かります

一行ずつやらねばならないものと思い込み、無駄な質問を追加してしまったので、1日たったら削除するようにします。
すいませんでした。

お礼日時:2006/11/24 16:55

Oracleであれば、私は以下のようにしてます。


例えばtrn.sqlっていうtruncate文の集まったファイルを作成して実行してます。
余計なものが出力されないようにsetを使ってますが、
足りないかもしれませんので詳細はマニュアルを参考にして下さい。

spool trn.sql
set lines 1000
set pages 0
set trimspool on
set feedback off

select 'truncate table ' || table_name || ';' from user_tables;
spool off

@trn
    • good
    • 1

テーブルごとに truncate するしかないです。



SQLをテキストファイルに書き込んでしまったらどうですか?

どんなRDBMS環境かわからないので回答しにくいのですが
spool table.log
select table_name from user_tables;
spool off

としておいて、table.log 中の テーブル名を利用するとか・・・。
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qtruncate tableを使って複数のテーブルを指定する方法

truncate tableを使って複数のテーブルを指定する方法
truncate table テーブル名;←これは一つのテーブルのみ
truncate table テーブル名テーブル名,;←こんな感じの事をしたいのですが、教えてください。

Aベストアンサー

これはできないです。
pl/sqlとかプロシージャたらできますけど。。。

参考URL:http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/tsqlref/ts_ta-tz_2hk5.asp

Q特定のスキーマのテーブルを一括削除したい

おせわになります、

Oracleのデータベースで
特定のスキーマのテーブルを一括削除したい時の
コマンドを探しているのですが、

ひとつずつ消すのは面倒なので、一括で消したいとかんがえております。

よろしくお願いします。

Aベストアンサー

ユーザを削除する時に、同時にスキーマ内のオブジェクトを一緒に削除するという方法では駄目でしょうか?(削除後ユーザを再作成する)
この方法だと、テーブル以外のオブジェクトも削除されてしまいますが・・・。

以下の方法でユーザを削除できます(システム権限が必要です)
DROP USER ユーザ名 CASCADE;


それか、以下のSQL*PLUS、SQLコマンドをSPOOLして実行し、SPOOLされた結果を再度実行するという方法は?
SET PAGES 0
SPOOL 任意のファイル名.SQL
SELECT 'DROP TABLE '||TABLE_NAME||';' FROM USER_TABLES;
SPOOL OFF
@任意のファイル名.SQL

Qデータベース内のテーブル名の取得

お世話になります。
初心者的な質問でしたらすいません。
SQL文にてデータベース内のテーブル名を
調べることができると聞いたことがあるのですが、
可能でしょうか。

もし、可能であれば、SQLの記述を教えてください。
お願いします。

Aベストアンサー

select * from tab;

私の場合、テーブル名だけ手っ取り早く知りたいとき、↑を打ちます。その他の情報も知りたいときは#2さんの仰るとおり、user_tablesで取得します。

Qimportについて

こんばんは。

exportしたダンプファイルを頂いたので
oracleにimportしようと思っています。
色々調べて以下のようにわかったのですが、
間違っていないか、パラメータで追加した方が
よいものがあれば、ご指摘お願いします。

1)
既に同じ内容のテーブルが存在するが、それは気にせずimportを行う。既存のテーブルデータは新しくimportするもので更新されている???

2)
SQL*PLUSでコマンドを叩く。
コマンド内容は以下の通り。
imp system/manager fromuser=test1 touser=test2 file=db_data.dmp log=implog.log

test1 ← DBA権限あり。
test2 ← このユーザーの表領域にデータを作成したい。

Aベストアンサー

>上記オプションで、既存のテーブルは古いデータが削除され、

ignore=yにしてもimpコマンドではデータの削除は行われません。
一意制約違反となります。
あらかじめ不要なデータは消しておきましょう。

truncate table テーブル名;
でデータを切り捨てるのがいいかと。


>新規に増えたテーブルは
>新規に作成(データ込み)と考えて正しいでしょうか?

はい。こちらはこうです。

Qすべてのテーブル削除

DELETE tbl1,tbl2,tbl3 FROM tbl1,tbl2,tbl3;
DROP TABLE tbl1,tbl2,tbl3 FROM tbl1,tbl2,tbl3;

以外で簡単に複数あるテーブルを削除する方法ってありますでしょうか?

Aベストアンサー

>すべてのテーブル削除

そもそもFROMはいらないでしょ・・・

DROP DATABASE hoge
で親DBを削除してつくりなおすとかありそうですが
ただ、テーブルの削除が頻繁に起こる運用というのは問題では?
ごくたまにしかないならテーブル名を指定して削除するのが妥当

Q既にテーブルが存在する場合のインポート

インポート対象のテーブルが既に存在する場合、次のエラーが発生します。

IMP-00015: オブジェクトがすでに存在するため次の文は失敗しました:
"CREATE TABLE ...

SQL Loaderではデータにスペースや改行が含まれているとdatの作成がめんどうですし、dmpファイルでcreate文を削除するようなこともできればしたくありません。

データを追記したいのでテーブルを削除せずにインポートしたいのですが、どうすればよいでしょうか?

Aベストアンサー

参考URLの内容はどうでしょうか?

参考URL:http://www2.odn.ne.jp/~cag07740/tech_info/oracle_ans7.html

Qbatファイルからsql文実行

クライアントOS:WIN2000
Oracle:9i(サーバ(UNIX)上にあります)

現在、クライアントからbatを起動し、SQL文を投げ、結果を取得したいと思っております。
(SQL文は単純にTBLをカウントしているだけです)

・batの中身
sqlplus %UID%/%PASS%@%SID% @test.sql > output

結果は取得出来るのですが、余分な情報も結果に出力されてしまいます。結果のみを出力させるにはどうすればよろしいでしょうか?

・余分な情報
Oracle9i Enterprise Edition Release 9.2.0.4.0 - Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.4.0 - Production
に接続されました。

Aベストアンサー

sqlplus に -S オプションを追加してみればどうでしょうか。

参考URL:http://biz.rivus.jp/sqlplus_overview.html

Qsqlplusで表示が変なので、出力を整形したい。

いつもお世話になっています。

サーバにアクセスしてsqlplusで、
データを調べたいのですが、
出力形式が見づらくて困っています。

よくわからいのですが、
---------------------------
カラム名1
---------------------------
カラム名2
---------------------------
カラム名3
---------------------------
1の値 2の値
3の値
---------------------------
カラム名1
---------------------------
カラム名2
---------------------------
カラム名3
---------------------------

上記のように意味不明な形式で出てきます。

例えばこんな風に

select カラム1,カラム2,カラム3 from hoge;

カラム1 1の値
---------------------------
カラム2 2の値
---------------------------
カラム3 3の値

等のように分かりやすく表示できないでしょうか?

ちなみにOracle9iR2を使用しています。
sqlに関するツールは使用できないルールでして、あくまでsqlplusのコマンド上でみやすくしなければなりません。

分かりづらくですいませんが、皆さま、ご教授お願いします。

いつもお世話になっています。

サーバにアクセスしてsqlplusで、
データを調べたいのですが、
出力形式が見づらくて困っています。

よくわからいのですが、
---------------------------
カラム名1
---------------------------
カラム名2
---------------------------
カラム名3
---------------------------
1の値 2の値
3の値
---------------------------
カラム名1
---------------------------
カラム名2
---------------------------
カラム名3
-----------------------...続きを読む

Aベストアンサー

SQLPLUSを起動して、

SQL>set linesize 列数

でどうだ。

SQL>show linesize

で確認ができる。

Q複数のテーブルの項目を同時に削除したい

お世話になります、
Oracleで、delete文で困っています。

関係しあう二つのテーブルtab1,tab2があります。

二つのテーブルから同時に関係する項目を削除する
場合、同時に両方のテーブルの関係する項目を削除する場合どのような文になるのでしょうか、

delete from で複数のテーブルをしてすることはできないし、

delete from (select * from tab1,tab2)というような感じでデリートしても、片方のテーブルしかデリートされません。

よろしくお願いします。

Aベストアンサー

結合VIEWで定義しておけば消せると思います。
詳しくはORACLEのマニュアルORACLE概要をご覧ください。

#バージョンに依存する機能もあるので質問の際にはバージョンも明記した方が良いと思いますよ。

Q3つの表の外部結合

表A、B、Cの3つがあり、Aのすべての行を出力したいと考えています。
外部結合を用いるのだとは思うのですが、3つの表に対して行う場合の
書き方がわからず困っています。
ご教授いただけないでしょうか?
select * from a,b,c
where a.商品ID =b.商品ID (+) and b.商品ID (+) =c.商品ID (+)
としてみましたが、うまくいきませんでした。

Aベストアンサー

ansi構文の趣旨からいえば、結合条件と絞り込み条件は分けて書くので・・

select *
from a
left join b on (a.商品ID =b.商品ID)
left join c on (b.商品ID =c.商品ID)
where a.年月 = 任意の値

と書くのが一般的でしょうね。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング