テストデータ作成のための良いツールはないでしょうか。

今のところ、Oracle SQL Developer や Visual Studio のサーバーエクスプローラー、OSqlGridなど
を使って、手作業でテストデータを作っています。
いずれも、グリッド編集的な機能によって、手作業でそれぞれのテーブルに対してデータを入力
しています。
(一度作ったデータは、再度クリーンな状態から再現するために、最終的に SQLのINSERT文に
して保存しています)

1テーブルあたりのテストデータ件数は10件から50件程度なのですが、
つらいなあ、と思うのは、例えば「テーブルA」の明細レコードとして「テーブルA-1」のような
テーブルがあり、テーブルA-1のさらなる明細レコードとして「テーブルA-2」がありまして、
そういった場合、上記のツールを使っている場合、それぞれに紐付くレコードを把握しつつ管理
するのが大変です。

テーブル構成を管理しているのは客先なのですが、カラムが増えたり移動(別のテーブルに移動)
したりして、末端の人間としては、既に作成したテストデータを変更するのが大変だ、という
悩みもあります。

テストデータ作成及び管理に良いツールはないでしょうか。
あるいは当該プロジェクトのための専用ツールを作った方が良いでしょうか。

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

A 回答 (2件)

テストデータ作成及び管理に良いツールなら、SuperDBToolとSuperDevToolをお勧めしますよ。

今は無料で公開しています。速めにダウンロードに行ってください。
http://www.google.co.jp/search?hl=ja&q=superdbto …

データの関係で一括でデータを作るツールです。
    • good
    • 1

テストデータ生成ツールについていくつか調べたり使ったりしたこともありますが、書いておられるようなことは特にツールを使って行わないとできないようなことではないような気がします。


よって、自力でツール化のほうがお勧めですね。

>いずれも、グリッド編集的な機能によって、手作業でそれぞれのテーブルに対してデータを入力しています。
>(一度作ったデータは、再度クリーンな状態から再現するために、最終的に SQLのINSERT文に
して保存しています)

ここが作業が大変になるところですね。
グリッド編集でテストデータを作成するのは、よほど少量でなければ止めておいたほうがいいでしょう。
お勧めのやり方ですが、テストデータの「種」保存用のテーブルを作り、少量の種レコードを保存し、そこからSQL文で種を増幅してテストデータ保存用テーブルにINSERTやUPDATEし、データ生成するような方法です。
SQLをうまく書けば、主キーを連番にしたり、金額などの数値をばらけさしたり、ヘッダ・明細関係を保つこともできます。
増幅する方法はコツさえつかめれば簡単です。


テーブルDDL変更は、プロジェクトメンバー全員で共有すべきなので、それは必ず知らせてもらうようにしましょう。できればその時の変更DDLも入手させてもらうようにして、テストデータ用テーブルにも適用すればよいのではないでしょうか。

とにかく、早めにグリッド編集作業からは脱却して、すべてをSQLで行うようにシフトすることですね。

この回答への補足

ご回答ありがとうございます&お返事が遅くなってしまい、申し訳ありません。


> グリッド編集でテストデータを作成するのは、よほど少量で
> なければ止めておいたほうがいいでしょう。
> お勧めのやり方ですが、テストデータの「種」保存用のテーブルを
> 作り、少量の種レコードを保存し、そこからSQL文で種を増幅して
> テストデータ保存用テーブルにINSERTやUPDATEし、データ生成する
> ような方法です。

説明不足で申し訳ありません。
実はuresiiwaさんのおっしゃる
「テストデータの「種」保存用のテーブルを作り」
の部分(たぶん)をしんどいと思っているのです。

単にバリエーションのあるデータを増幅したデータが欲しい場合、
ちょっとしたプログラムを組んで、それで例えば1000件のデータを
INSERT文として出力するようにしてます。
テキストを吐き出せる言語なら何でもいいので、適当な言語で吐き
出してます。
場合によっては、プログラムから直接Oracleにデータ出力するように
してます。

この場合は、主キーを連場にしたり、金額などの数値をランダムにしたり
といったことは、自由自在にできるので、まあ、どうでもいいんですが。


「種」となるようなデータを作るには、やはり手作業しかないと思うのですが
どうでしょうか。
その手作業をする場合には、グリッド編集的なツールで、それぞれのテーブルの
関連を見ながら作らざるを得ないのでは?とか思うのですが。

その場合に、既存のグリッド編集ツールがどうにも使いにくくて、何か良い
ツールはないだろうかと。


件数として、1テーブル10件から50件と言ってしまいましたが、若干の
バリエーションを入れたくてそう言ってしまいまして、すみませんでした。
実際は、1テーブル最低必要なのは5件程度とか、孫明細まで入れてトータルで
30件程度のデータがあれば、種としてはOKだろうと思います。

ただ、それを作るのがしんどいです。


> グリッド編集でテストデータを作成するのは、よほど少量でなければ
> 止めておいたほうがいいでしょう。

この場合は、「よほどの少量」に該当するのではないかと思っている
のですが、どうでしょう。

SQLで「増幅」させる以前の件数だと思うので、さすがに手作業で
作らざるを得ないのではないかと思うのです。



ちなみに、テーブル数はとりあえず3テーブルとかそんな程度で、そこから
参照しているマスタが多数あったりします。
3テーブルの各カラム数は、数十カラムぐらいあり、10程度のマスタを参照
するようになってまして、そこがまた面倒です。

グリッド編集的な機能で、既存の(というか、他社が作った)マスタを
参照しながらそれにあうデータを作っていくのが、ほんの数件であっても
大変だなあ、と思う次第です。
しかも一度作ってOKというわけではなく、他社のマスタデータがまたコロコロ
変わるので、そういった場合に、こちらのデータの整合性がきちんと取れているか
どうかとかを「パッと見」で確認しつつ、合わない部分をちょこちょこっと
修正したりできるといいなあとか思います。


> とにかく、早めにグリッド編集作業からは脱却して、すべてをSQLで行うように
> シフトすることですね。

全てをSQLで行うと、逆に効率が悪くなりそうな気がするのですが、
そんなにうまくいくものなんでしょうか。

補足日時:2009/05/18 23:16
    • good
    • 0

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

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

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

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

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

QPCデータのバックアップのために、RAID1(ミラーリング)を簡単にし

PCデータのバックアップのために、RAID1(ミラーリング)を簡単にしてくれるソフト

お世話になります。
現在、PCデータのバックアップを取りたいと考えています。
その際の形として、
・外付けHDDを2台用意
・ミラーリングソフトを購入
で考えております。

また、ソフトに求める形として、
・ミラーリング
・前回の差分のみをコピーしてくれる。
形を望んでいます。

有料のソフトでも結構ですので、教えて頂ければと思いますので
宜しくお願いします。

また、ほかによい方法ありましたら教えてください。

Aベストアンサー

>HDD2台に対してのミラーリングという意味でした。。。
RAIDという用語が不適切でしたね ^ ^;

>定期的に外付けHDD×2に手動でバックアップ
> そのHDD2台に対して、一度にミラーリング・前回分との差分を判断してコピー
>をしてくれるソフトなのです。
UNIX系なら rsync で決まりのようですが、Windows環境でも rsync を使うのが多いようです

下記のサイトを参照してみて下さい。
http://ebony.blog.so-net.ne.jp/2009-02-21

Cygwin + rsync
http://satospo.sakura.ne.jp/blog_archives/tech/tool/cwrsync.html

Q親子関係を持つテーブルから子テーブルの最新レコードを取得する方法について

親子関係を持つ2つのテーブルから
データを取得する方法について質問があります。
下記の2つのテーブルがあったとします。

契約基本(A)
【契約番号】【契約名】
K0001    契約名1
K0002    契約名2
K0003    契約名3

契約明細(B)
【契約番号】【契約種別】 【金額】【契約年月日】
K0001    S1     1000  2005/12/01
K0001    S2     2000  2005/12/02
K0001    S3     3000  2005/12/03
K0002    S1     4000  2005/12/23
K0002    S2     5000  2005/12/22
K0002    S3     6000  2005/12/21
K0003    S1     7000  2005/12/10
K0003    S2     8000  2005/12/12
K0003    S3     9000  2005/12/11

この2つのテーブルを結合して、
契約基本・契約番号毎に最も契約明細・契約年月日が
新しいレコードを取得して下記のような
取得結果を得たいと思っています。

A.K0001,A.契約名1,B.K0001,B.S3,B.3000,B.2005/12/03
A.K0002,A.契約名2,B.K0002,B.S1,B.4000,B.2005/12/23
A.K0003,A.契約名3,B.K0003,B.S2,B.8000,B.2005/12/12

これを1本のSQLで実現する場合、
どのような方法が良いのでしょうか?
データベースはOracle9iを使用しています。

恐らく既出の質問だとは思いますが
どのようなキーワードで検索して良いのかわからず
質問させてもらいました。

お手数をおかけしますが
よろしくお願いします。

親子関係を持つ2つのテーブルから
データを取得する方法について質問があります。
下記の2つのテーブルがあったとします。

契約基本(A)
【契約番号】【契約名】
K0001    契約名1
K0002    契約名2
K0003    契約名3

契約明細(B)
【契約番号】【契約種別】 【金額】【契約年月日】
K0001    S1     1000  2005/12/01
K0001    S2     2000  2005/12/02
K0001    S3     3000  2005/12/03
K0002    S1     4000  2005/12/23
K0002...続きを読む

Aベストアンサー

select * from
契約基本 join 契約明細 as T1 on 契約基本.契約番号=T1.契約番号
where exists
(select * from 契約明細
group by 契約番号
having T1.契約番号=契約番号 and T1.契約年月日=max(契約年月日)
)

明細の主キーが不明なため
スキーマとデータの状態で同じ契約番号の
レコードが複数出ることがあります

QRAID1をバックアップ代わりに使用する

RAID1をバックアップ代わりに使用する

RAID1の場合、マザーボードが故障した場合、HDDを外して、別のパソコンに繋いだ場合、
フォルダー単位でデータファイル(Excelやjpg等)は見ることが出来るのでしょうか?

RAID1のの概要は存じていますが、ネットで調べると、RAID1とバックアップは別物と書かれて
いるものばかりですが、HDD一台で使用しているパソコンで、ソフト的におかしくなっても、
大概は、別パソコンに外付けすると、中身が見れるので、RAID1もそうであるのならば、
基本的に、データ的には、バックアップしていると同じ事と理解してよいのでしょうか?
よろしくお願いします。

Aベストアンサー

>RAID1の場合、マザーボードが故障した場合、HDDを外して、別のパソコンに繋いだ
微妙な問題で、同じコントローラなら見えると思いますが・・・見えない場合もあると思います。


>データ的には、バックアップしていると同じ事と理解
RAID1の機能を正しく理解すると「バックアップ」との違いが明らかになると思います。

RAID1は、2台のHDDで1台のHDDに見せ掛けて1台分のHDD容量を犠牲にして信頼性を高めます。 同時に2台のHDDが故障しなければ、障害が発生した時点で警告が発生するのでデータが失われるという最悪の事態に進展することを防止できる可能性が高いですが、ユーザの間違えた操作によるデータの削除に対しては無力です。

バックアップはバックアップを取得した時点のデータを別なメディアに書き込んで保存し、データが失われるなどの障害時に保存していたデータから復旧するために行います。 障害が発生してから、バックアップによるリカバーが実施されるので、障害発生を防止・検出する仕組みは皆無です。


端的に言えば、RAIDを構成すると本来のHDDの信頼性を更に高める機能であってバックアップを排除するまでの機能は持っていないです。

>RAID1の場合、マザーボードが故障した場合、HDDを外して、別のパソコンに繋いだ
微妙な問題で、同じコントローラなら見えると思いますが・・・見えない場合もあると思います。


>データ的には、バックアップしていると同じ事と理解
RAID1の機能を正しく理解すると「バックアップ」との違いが明らかになると思います。

RAID1は、2台のHDDで1台のHDDに見せ掛けて1台分のHDD容量を犠牲にして信頼性を高めます。 同時に2台のHDDが故障しなければ、障害が発生した時点で警告が発生するのでデータが失われると...続きを読む

Q複数レコードのデータを1レコードに集約したい

お世話になります。
複数レコードのデータを1レコードに集約したいのですが色々試してみましたが上手くいきません。

まず、以下のようなテーブルがあります。

TableA(キーはID)
ID NO
1, 2

TableB(キーはIDとNO)
ID NO SYU_NO FUKU_NO
1, 1, 1, 1
1, 2, 1, 2
1, 3, 2, 1
2, 1, 1, null
   ・
   ・

TableC(キーはIDとKUBUNとNO)
ID KUBUN(SYU or FUKU) NO START END KAKUNIN
1, 1, 1, 20090101, 20091231, 20090310
1, 1, 2, 20090201, 20091130, 20090310
1, 2, 1, 20090401, 20100331, 20090312
   ・
   ・

これを、以下のようなレコードにしたいのですが・・。
ID START(SYU_NO) END(FUKU_NO) START(FUKU_NO) END(FUKU_NO)
1, 20090101, 20091231, 20090401, 20100331

以下のようなselect文を作成しましたが・・。
select
A.ID || ',' ||
case when C.KUBUN = 1 then C.START end || ',' ||
case when C.KUBUN = 1 then C.END end || ',' ||
case when (C.KUBUN = 2 and B.FUKU_NO = C.NO) then C.START end || ',' ||
case when (C.KUBUN = 2 and B.FUKU_NO = C.NO) then C.END end || ',' ||
from
TableA A
inner join
TableB B
on
A.ID = B.ID
and A.NO = B.NO
inner join
TableC C
on
B.ID = C.ID
and ((C.KUBUN = 1 and B.SYU_NO = C.NO)
or (C.KUBUN = 2 and B.FUKU_NO = C.NO))
;

以下のような結果が返ってきます。
ID START(SYU_NO) END(FUKU_NO) START(FUKU_NO) END(FUKU_NO)
1, 20090101, 20091231, ,
1, , , 20090401, 20100331

実は別サイトでも投稿しておりますが回答がなく大変困っております。
どうか宜しくお願い致します。

お世話になります。
複数レコードのデータを1レコードに集約したいのですが色々試してみましたが上手くいきません。

まず、以下のようなテーブルがあります。

TableA(キーはID)
ID NO
1, 2

TableB(キーはIDとNO)
ID NO SYU_NO FUKU_NO
1, 1, 1, 1
1, 2, 1, 2
1, 3, 2, 1
2, 1, 1, null
   ・
   ・

TableC(キーはIDとKUBUNとNO)
ID KUBUN(SYU or FUKU) NO START END KAKUNIN
1, 1, 1, 20090101, 20091231, 20090310
1, 1, 2, 20090201, 20091130, 20090310
1, 2, 1, 20090401, 2...続きを読む

Aベストアンサー

今実際には試せないのですが、IDをキーにMAXを使ってグルーピングしたらできませんか?

QRAID1はバックアップではない?

RAID1(ミラーリング)はバックアップにならないのでしょうか。
ブログ等、どこかでそんな話を読んだような記憶があって…

私は、データを二重化するRaid1はバックアップになると思うのですが、
実際のところ、どうなのでしょうか。

私は今、大事なデータに関してはRaid1及び別HDDへの同期をとって
3重化しております。無意味でしょうか。

バックアップの仕方でアドバイス頂けたらと思います。

Aベストアンサー

バックアップという言葉の解釈によって違ってきます。

ご承知のように、RAID1は2つのドライブに同じデータを書き込みますから、どちらかが故障しても、もう一方のドライブでデータを復旧することができます。その意味ではバックアップはとれていると言えます。
しかし、RAIDカードが故障するなどの事態が発生すると、2台のドライブのデータが一気に失われますので、バックアップとしては不十分と言えます。

ご質問を拝見すると、さらに別のドライブへ同期バックアップをされているということなので、RAIDカード故障のリスクはヘッジされているということになります。3重化は無意味ではありません。

Qデータの無いテーブルと結合してデータ抽出

以下のテーブルを使用してデータを抽出したいのですが、データが抽出できません。


名称テーブル
--------------------
ID | NAME |
--------------------
0   AA
1   BB
2   EE
3   FF

履歴テーブル
--------------------
ID | DAY | OLDNAME
--------------------
2   2004   CC
3   2004   DD

結果取得したいデータ
--------------------
ID | NAME | OLDNAME
--------------------
0   AA

=現在のSQL=
SELECT
A.ID,
A.NAME,
B.OLDNAME
FROM 名称 A , 履歴 B
WHERE
A.ID = B.ID(+) AND
A.ID=0 AND
B.DAY =
 (SELECT MAX(C.DAY)
 FROM 履歴 C
 WHERE
 A.ID = C.ID(+))

履歴テーブルには名称テーブルの履歴があります。
履歴にデータが無くても名称データを取得したいのですが、こういった場合はどのようなSQLを作ればいいのでしょうか。

以下のテーブルを使用してデータを抽出したいのですが、データが抽出できません。


名称テーブル
--------------------
ID | NAME |
--------------------
0   AA
1   BB
2   EE
3   FF

履歴テーブル
--------------------
ID | DAY | OLDNAME
--------------------
2   2004   CC
3   2004   DD

結果取得したいデータ
--------------------
ID | NAME | OLDNAME
--------------------
0   AA

=現在のSQL=
SELECT
A.ID,
A.NA...続きを読む

Aベストアンサー

(B.DAY =
 (SELECT MAX(C.DAY)
 FROM 履歴 C
 WHERE
 A.ID = C.ID(+))
or
B.DAY is null)

ってis nullくっつればOKかな?
未確認です。

Qバックアップ v.s. RAID

こんにちは。

先日、http://oshiete.goo.ne.jp/qa/8169080.html に対して「データの量が大きすぎるから、ネットワーク経由でバックアップするよりもRAIDを組んだほうが良いんじゃないの?」と回答した所、「RAIDはバックアップの代わりにはなりませんよ」と別な方からご指摘を頂きました。

そこで質問なのですが、変更の追跡以外の面で、どういった場合にRAIDはバックアップに機能面で劣るのでしょうか。

Aベストアンサー

ぱっと思いつくのが、災害対策でしょうか。
強固なRAIDでも火災にあえば駄目になりますが、バックアップを別な場所に保管してあればそこから復旧できます。

あと、個人的に経験があるのが、RAID5のHDDが雪崩式に次々壊れてシステムが駄目になった事。搭載していたHDDが全て同じロットだったのですが、どうやらロット不良が有ったらしく、その時はバックアップの重要性を実感しました。

まぁ、どちらもレアケースです。

Q異なるテーブルのレコード削除

オラクル初心者です。宜しくお願いします。
AAA、BBB、CCCというテーブルがあると仮定します。
画面から入力された値(ddd)をキーとして、CCCテーブルから該当するレコードをセレクト文で引っ張り、eeeという値を抜き出したとします。
そのeeeという値をキーにAAA、BBBテーブルのレコードを削除するにはどういうSQLを発行すればよろしいでしょうか?
"delete from
AAA, BBB
where eee =
(select eee from CCC where fff = ddd);"
では駄目でした。
質問が下手でわかりにくいかもしれませんが、どうかご教授お願いします。

Aベストアンサー

DELETE文1文では、1つのテーブルに対してしか操作できませんので、
DELETE文を2つ投入するか、PL/SQLブロックとして投入するかいずれかに
なります。
(無名PL/SQLが投入できるミドルウエアと投入できないミドルウエアがあります)

QRAID1設定は、バックアップソフトで作成したバックアップイメージにまで影響する?

前提条件:
デスクトップコンピュータ買い替えを検討していますが、買い換えたコンピュータの内蔵ハードディスクをミラーリングしようと思います。

構築したい構成内容:
OS:WindowsXP SP3
内蔵ハードディスクは、以下の4つを使用します:
HD1(CドライブRAID1:OSインストール)
HD2(DドライブRAID1:データ保存)
HD3(CドライブRAID1ミラー)
HD4(DドライブRAID1ミラー)

http://oshiete1.goo.ne.jp/qa5514901.html
これに関して、上記のスレでk-ayakoさん(回答番号:No.4)にシステムのイメージをTrueImageなどで作成するという助言をいただきました。

k-ayakoさんの助言では、CドライブはRAID1でミラーリングする必要はないのではということでしたが、下記の質問は、CドライブもRAID1でミラーリングする前提でお聞きしています。

質問:
RAID1を使用してHD1(CドライブRAID1:OSインストール)のミラーをHD3(CドライブRAID1ミラー)に取るとして、HD1のバックアップイメージをTrueImageなどのバックアップソフトで作成した場合、そのバックアップイメージ(バックアップイメージのCドライブ)はRAID1が設定された状態のCドライブイメージとなるのでしょうか(RAID1設定は、バックアップソフトで作成したバックアップイメージにまで影響するのですか?)? つまり、そのバックアップイメージを別のHDに復元した場合、“RAID1が設定された状態の”Cドライブとして復元されるのですか?

また、そもそもHD1(CドライブRAID1:OSインストール)にRAID1を設定した状態で、バックアップソフトを用いてHD1(CドライブRAID1:OSインストール)のバックアップイメージを作成すること自体可能なのでしょうか(バックアップソフトを用いてRAID1設定されたHDのバックアップイメージを作成することは可能ですか?)?

参考サイト等も教えて下さい。

よろしくお願いします。

前提条件:
デスクトップコンピュータ買い替えを検討していますが、買い換えたコンピュータの内蔵ハードディスクをミラーリングしようと思います。

構築したい構成内容:
OS:WindowsXP SP3
内蔵ハードディスクは、以下の4つを使用します:
HD1(CドライブRAID1:OSインストール)
HD2(DドライブRAID1:データ保存)
HD3(CドライブRAID1ミラー)
HD4(DドライブRAID1ミラー)

http://oshiete1.goo.ne.jp/qa5514901.html
これに関して、上記のスレでk-ayakoさん(回答番号:No.4)にシステムのイメ...続きを読む

Aベストアンサー

kitty1000さんこんにちは!
>TrueImage及びShadowProtectのハードウェアRAIDに対するバックアップは、可能なのでしょうか?
私の使用しているRAID1はIntelが供給しているチップセットの依存しているソフトウエアRAIDなのでハードウェアRAIDについては、わかりません。
前回もお話した通り私の環境(これは前回書いていない:WinXPPro、P5K-E、Q9450、seagate500G台RAID1)では、両方ともバックアップ及びリストアは出来たと記憶しています。
>TrueImage及びShadowProtectを両方と使ってみて、感想はどうですか?
TrueImageはポピュラーなバックアップソフトですね。機能も充実しています。
デスクのクローン作成は80GBを300GBのHDへの引越し(OS含む)には良い機能だとおもいます。
ShadowProtectは売れてないのかマイナーなイメージがありますね。
基本的にHD単位のバックアップが中心ですが、スケジュールが小まめに設定できます。
一番の売りは、私はやったことがないですが、バックアップイメージを他のパソコンにリストアできることです、本当かな?私は、RAID対応ということで購入してしまった。
>ShadowProtectの事業用(電話サポートあり)は高額そうですね。
私は、ベクターからダウンロード版(サポートなし)の安いのを購入。

TrueImage及びShadowProtect両方とも500GB中300GB使用でバックアップに2~3時間、リストアに5~6時間かかったと記憶しています。ShadowProtectの方が少し高速です。また、バックアップイメージは圧縮がそれほど効かないため、1TGBの外付HDに3世代前後(3回の完全バックアップ)しか出来ませんから、実用的ではないと思います。
私は、新しいソフトをインストールする前とか、RAIDボリュームの1台のHDが故障したとき交換前にバックアップを取るとか、HD全体をバックアップはしていません。通常は、RAID1のミラーリンクである程度の問題には対応できると考えています。
先日、RAIDボリュームの1台のHDが故障したとき、2~3日1台でRAID1が解除のまま、パソコンを稼働していましたが、問題ありませんでした。故障したHDを交換後、RAID1の再構築も問題なく行なえました。故障したと思ったHDはHDケースに組み込みUSB接続でWin上からは、中を見れました(壊れてなかった?)。多分、そのHDはセクタ不良があるのではなのでしょうか?!一方のHDにセクタ不良があれば、RAID1のミラーリンクは解除され、故障と判断すると考えます。
長文で失礼しました。bobnash

kitty1000さんこんにちは!
>TrueImage及びShadowProtectのハードウェアRAIDに対するバックアップは、可能なのでしょうか?
私の使用しているRAID1はIntelが供給しているチップセットの依存しているソフトウエアRAIDなのでハードウェアRAIDについては、わかりません。
前回もお話した通り私の環境(これは前回書いていない:WinXPPro、P5K-E、Q9450、seagate500G台RAID1)では、両方ともバックアップ及びリストアは出来たと記憶しています。
>TrueImage及びShadowProtectを両方と使ってみて、感想はどうです...続きを読む

Q登録テーブル全てのレコードカウントについて

唐突で申し訳ありませんが、oracle の count について質問があります。
現在、複数のテーブルに各データ(レコード)が入っているのですが、
select 文でテーブル名を指定せず、登録されている全テーブルに対するレコード件数をカウントしたいのですが、どなたか教えていただけないでしょうか?よろしくおねがいします。。m(__)m

<出力イメージ>
TABLE_NAME   COUNT(*)
------- -----
商品名        1250
連絡先        8700

Aベストアンサー

ストアド・ファンクションを作っておけば、select一撃で解決できます。

ストアドの例)
create function TABLE_COUNT(TABLE_NAME in varchar2) return number
is
Result number;
begin
execute immediate 'select count(*) from "'||TABLE_NAME||'"' into Result;
return(Result);
end;

実行の例)
select TABLE_NAME,TABLE_COUNT(TABLE_NAME) from user_tables;

サンプルなので、エラーチェックもしてません。適宜考えてください。


人気Q&Aランキング

おすすめ情報