• 締切済み

テストデータを作成したい

Oracle9iです。テストデータを作成したいです。 カラムが200くらいあるテーブルに対して、既に登録済みの1レコードの主キーだけ変更したものを10万件登録したいのですが、何かいい方法はないでしょうか?

  • Oracle
  • 回答数4
  • ありがとう数4

みんなの回答

  • letsdb2
  • ベストアンサー率0% (0/0)
回答No.4

下記ツールを使えば、簡単です。 http://www.superdbtool.com ExcelDBToolで1つのテーブルが出来ましたら、同じ列名のほかのテーブルにコピーできます。 また、Excelに線を引いて、引いた線でデータの作成もできます。 下記のダミーデータ作成もできます。 日付, 時間, タイムスタンプ, 都道府県, E-Mail, URL, 郵便番号, 携帯, 苗字のみ, 氏名, ふりがな, 性別, 年齢, 血液型, 固定電話, 婚姻, 固定値, 国籍, 国籍英語, 国籍英語略, 企業名, 住所, 住所ふりがな, 半角英字, 市区, 町村, 最寄駅, 最寄駅ふりがな, 路線, 銀行コード, 銀行名, 銀行カタカナ, 支店コード, 支店名, 支店カタカナ, 大学名, 業種大分類, 業種大分類名称, 業種中分類, 業種中分類名称, 業種小分類, 業種小分類名称, 職種大分類, 職種大分類名称, 職種中分類, 職種中分類名称, 職種小分類, 職種小分類名称, 数値連番, 整数・小数点数, 英数混在, 文字列+連番, 文字列+全角連番, 全角漢字, ひらがな, 全角カタカナ, 半角カタカナ, 全角英数, 全角数値, 全角英字, 全半混在, 特殊文字 ご参考まで。

参考URL:
http://www.superdbtool.com
  • yamada_g
  • ベストアンサー率68% (258/374)
回答No.3

こんな感じでinsert文を作ってみてはどうでしょうか。 全角でインデントしてますので半角に直してください。 select  case   when column_id = 1 then    'insert into ' || table_name || ' select '  end ||  case   when column_name = '主キー' then    column_name || ' + rownum' --主キーを適当に編集   else    column_name  end ||  case   when column_id = max_column_id then    ' from '|| table_name || ',tab,tab' --件数を増幅するためにtabをクロスジョイン    ||' where 主キー = ''条件'' and rownum <= 100000;' --登録件数   else    ','  end from (select a.*,max(column_id) over() max_column_id    from user_tab_cols a    where table_name = 'テストデータを作成するテーブル名') order by column_id;

ikedaikeda2008
質問者

お礼

回答ありがとうございました。 今回は、自分が困っていたことに気付いた先輩がデータ作成をしてくれました。 この方法でどうなるのかを試してみたいと思いました。 ヒントありがとうございました。

  • SaKaKashi
  • ベストアンサー率24% (755/3136)
回答No.2

主キーの属性は何ですか?number型?char型?varvhar型?複数項目ですか? insert xxx select yyy from zzz とかできるので

ikedaikeda2008
質問者

お礼

回答ありがとうございました。 今回は、自分が困っていたことに気付いた先輩がデータ作成をしてくれました。 主キーは、number型でした。情報少なくて申し訳ありませんでした。 ヒントありがとうございました。

noname#140045
noname#140045
回答No.1

このようなものは、Perlなどを使ってCSV形式で出力するプログラムを作るのが一般的です。 1度、プログラムを作ってしまえば、主キーだけでなく他の項目に対しても適用できます。 もう少し、具体的な説明があれば、もっと詳しい説明ができると思いますけどね。

ikedaikeda2008
質問者

お礼

回答ありがとうございました。 今回は、自分が困っていたことに気付いた先輩がデータ作成をしてくれました。 初心者なので、Perlがわかりませんが、今後勉強していきたいです。 ヒントありがとうございました。

関連するQ&A

  • テストデータ作成に苦労しています

    テストデータ作成のための良いツールはないでしょうか。 今のところ、Oracle SQL Developer や Visual Studio のサーバーエクスプローラー、OSqlGridなど を使って、手作業でテストデータを作っています。 いずれも、グリッド編集的な機能によって、手作業でそれぞれのテーブルに対してデータを入力 しています。 (一度作ったデータは、再度クリーンな状態から再現するために、最終的に SQLのINSERT文に して保存しています) 1テーブルあたりのテストデータ件数は10件から50件程度なのですが、 つらいなあ、と思うのは、例えば「テーブルA」の明細レコードとして「テーブルA-1」のような テーブルがあり、テーブルA-1のさらなる明細レコードとして「テーブルA-2」がありまして、 そういった場合、上記のツールを使っている場合、それぞれに紐付くレコードを把握しつつ管理 するのが大変です。 テーブル構成を管理しているのは客先なのですが、カラムが増えたり移動(別のテーブルに移動) したりして、末端の人間としては、既に作成したテストデータを変更するのが大変だ、という 悩みもあります。 テストデータ作成及び管理に良いツールはないでしょうか。 あるいは当該プロジェクトのための専用ツールを作った方が良いでしょうか。

  • 単体テストレベルのテストデータの作成方法

    単体テストレベルのテストデータの作成方法 以前、このような質問をさせていただきました。 http://okwave.jp/qa/q4951742.html いまだに同じ悩みを抱えておりまして、皆様どのようにしているのだろうか、あらためてご質問させていただきたいと思います。 あるいは、「このサイトで質問するよりもっと適切ながある」ということでしたら、そのサイトを教えていただけないでしょうか。 より具体的な例で質問させていただきたいと思います。 例えば、次のようなテーブル群があったとします。 ※OracleベースのDDL(適当&適宜省略(^^;)で示しております。 ※同一カラム名の個所は、それぞれのテーブルにひもづいています。 ※単純な例なので、各テーブルの関連はテーブル名でお分かりになるかと思います... CREATE TABLE 受注テーブル ( 受注ID VARCHAR2(10) PRIMARY KEY, 顧客ID VARCHAR2(10) 受注日 DATE, ); CREATE TABLE 受注明細テーブル ( 受注ID VARCHAR2(10), 製品ID VARCHAR2(10), 数量 NUMBER(10,0), PRIMARY KEY (受注ID, 製品ID) ); CREATE TABLE 顧客マスタ ( 顧客ID VARCHAR2(10) PRIMARY KEY, 顧客会社名 VARCHAR2(100), ); CREATE TABLE 製品マスタ ( 製品ID VARCHAR2(10) PRIMARY KEY, 製品名 VARCHAR(100), 仕入先ID VARCHAR2(10) ); CREATE TABLE 仕入先マスタ( 仕入先ID VARCHAR2(10) PRIMARY KEY, 仕入先会社名 VARCHAR2(100) ); 正常系のテストパターンが(仮に)数十あるものとして、各パターンごとに0件から10件程度のデータを作成したいです。 皆様どのようにテストデータを作成しているのでしょうか。 あるいは、上記の例ではたかだか5テーブルのリレーションではありますが、ここでは省略した各種カラムにひもづく別のマスタ群が多数あるとした場合はどうでしょうか。 上記のテーブルの例で言えば「注文テーブル」用のデータを作成しつつ、それにひもづいた正しい「注文明細テーブル」用データを作成するだけでもしんどいと思ってしまいます。 さらに、関連するマスタ群として「顧客マスタ」や「仕入先マスタ」などなど多数ある場合、それぞれの関連を見ながら「正しいデータ(つまりテストデータ自体が間違っている、という事態を避けたい)」を作成するのが難しいと感じてしまいます。

  • データの追加の仕方

    特定のカラムへ、レコードの追加を行いたいと思っています。その際に、 主キーが既に存在していれば、該当するカラムのデータのみを追加し、 主キーが存在しなければ、新たに主キーを追加して、レコードを登録を行いたいと思います。 REPLACEコマンドでこの操作を実行できると思ったのですが、主キーが既に存在する場合に、指定したカラム以外の内容が、NULLに変更されてしまうので困っています。指定したカラム以外は、そのままの情報を保持して欲しいのですが、どのようにすれば良いのでしょうか? 行いたい操作の具体例を以下に挙げます。 現在のテーブル +---+--------+--------+ |ID| Colum1 | Colum2 | +----+--------+--------+ |15| aaaa | NULL | |23| NULL | bbbb | +----+--------+--------+ 上のようなテーブルに、ID=1,Colum2='cccc'というデータを追加したい。但し、 もしID=1が存在しなければ、新しく(ID=1,Colum1=NULL,Colum2='cccc')というデータを追加したい。 もしID=1が存在する場合には、Colum1の内容は変更せずにColum2だけ変更したい。

    • ベストアンサー
    • MySQL
  • ACCESS2000:主キーに半角と全角データを登録する方法は?

    定数.mdbにTBLというテーブルがあります。 このテーブルの主キーのカラムに以下のような半角と全角のデータを登録しようとすると、「インデックス、主キーまたはリレーションシップで指定されている値が重複しています。変更はできませんでした。」というエラーが発生します。これを回避してデータ登録する方法を教えてください。 AAA   ← 半角 AAA  ← 全角 よろしくお願いします。

  • 作成したSQLの単体テスト【エビデンスの取り方】

    作成したSQLの単体テストをするにあたって、エビデンスの取り方に悩んでおります。 テストケースとしては、 抽出した項目が正しく設定されているか、ホワイトボックスの観点から、 条件に一致する場合、しない場合で期待した値が設定されているか、などです。 抽出したものは50件のレコードで、カラムは15個程度あるとします。 エビデンスは今まではプリントスクリーンで画面キャプチャを取得して、 エクセルに張り付けていました。(SQLを使わないものの単体テスト) そしてインプットとアウトプットのデータを、テストケースのNoに合わせたファイル名にして、 フォルダに格納しておりました。 しかしSQLのテストとなると、どのようにまとめればいいか悩んでおります。 例えばあるカラムが正しい値になっているかというのは、抽出した60件のレコードのうち1レコードをコピーして、エクセルに張り付け、「このカラムのところに○○という値が設定されているため正しい」というようにするのでしょうか。 そうなるとカラムが15個あるので、15個のカラムが正しい値に設定されているかのチェックは 最低でも15個のテストケースが出来上がります。 テストケース(1):カラムAAAの値が○○であること テストケース(2):カラムBBBの値が△であること テストケース(3):カラムCCCの値が□であること    ・    ・    ・ テストケース(15):カラムYYYの値がXであること 1つの1つのテストケースに対して1レコードをコピーして、 「このカラムはこの値になっているから正しい」ということを繰り返すことになるのでしょうか。 そしてインプットとなるデータは、そのデータをDBでつかえるようにインサート文を用意すれば良いのでしょうか。 意味が伝わりにくい文章になってしまいましたが、エビデンスの取り方という点で、 どのように工夫すれば良いのか教えていただきたく、質問致しました。

  • オラクルからAccessにデータ追加

    オラクルから、必要なデータを抜出し加工の為のDBをAccessで作成していますが、オラクルから抜き出したデータ(レコードセット)を、どうやってAccessのテーブルに書き込めばよいかがわかりません。 ◎環境 Oracle:10g Access:2010 ◎現在の状況 Dim CON As New ADODB.Connection Dim RS As ADODB.Recordset Dim SQL As String Dim i As Integer 'DB接続定義 CON.Open "DSN=DNS名;UID=ユーザー名;PWD=パスワード;" 'SQL文 SQL = "SELECT " SQL = SQL & "カラム1," SQL = SQL & "カラム2," SQL = SQL & "カラム3" SQL = SQL & "FROM オラクルテーブル名 " SQL = SQL & "WHERE 抽出条件 " SQL = SQL & "AND 抽出条件" SQL = SQL & "GROUP BY カラム" SET RS = CON.EXCUTE(SQL) For i = 1 To 10 Debug.Print rs(カラム1) & rs(カラム2) next i ここまでは、オラクルのテーブルから、レコードセットにデータが取り込まれてます。 rs.close: SET RS = Nothing con.close:SET CON=Nothing end sub 案1 レコードセットのデータを、Access側のテーブルにループで回して、1行ずつデータ追加 案2 INTO句で直接、テーブル作成 調べていて、2通りのやり方があると思うのですが、どちらにしても、テーブルへの書き込み方がわかりません。 案1の場合、Access側のテーブルを開いてデータ追加する方法 ※同時に2つのテーブルを開くことになるのでは? 案2の場合、SQL文はオラクルで処理する為の物なので、AccessテーブルのINTO句が使えるのか? オラクルのテーブルをリンクする事も考えたのですが、実際動かすPCにはAccessRuntimeしかインストールしてませんので、オラクルのテーブルをリンクしてくれませんでした。 よい方法があれば、アドバイスを頂けたら幸いです。

  • SQLiteで最も古いレコードのみの削除

    AndoroidでDBを使うのですが、考える動作のSQL文が作成できません。 テーブルTESTは以下のカラムを持ちます  ・ID - primary key not null  ・VALUE - not null テーブルTESTは最大で10件のレコードを保持します、11件目のレコードが発生したら 最も古い1件目のレコードを削除してから、11件目のデータを新しい10件目のデータとして テーブルに保存します。 そのために「最も古いレコード1件のみを削除する」というSQLを作成したいのですが、 考えたSQL文が正しくないと怒られてしまいます。 delete from TEST as A, (select * from TEST LIMIT 1)as B where A.ID=B.ID; この動作を1つのSQL文で行うのは不可能なのでしょうか?

  • Accessのテーブルへのデータインポートについて

    Accessのテーブルへのデータインポートについて Access2002で、A.mdbのTESTテーブルからB.mdbのTESTテーブル(構造は同じ)へテーブルデータをインポートしたいのです。 TESTテーブルの主キーはSEQ(オートナンバー)しかありません。 そのときに、コピー元とコピー先の主キーに重複があった場合、オートナンバーなので自動で再付番しデータが追加して欲しかったのですが、 Accessの機能のエクスポート、インポートでは、コピー先に主キーに重複があったデータは上書きされてしまいます。 テーブルを開き、データをコピー&ペーストしますと、ペーストしたときにオートナンバーで自動で再付番されます。 この方法でもいいのですが、データが数百万件あるので、現実的ではありません。 Accessのインポート・エクスポートで、オートナンバーで主キーを再付番してから、B.mdbのTESTテーブルにデータ追加する方法はないでしょうか? よろしくお願いいたします。

  • SQLを使ったデータの作成

    コマンドプロントを使用し、SQLでデータベースを作成しています。 大きなテーブルを複数作り、複数のデータの作成をしています。 1.テーブルの方の定義を行い、キー項目を決める。 2.データは、一つ一つの項目ごとに、データの型やサイズを決める。 3.いくつか検索をした際に、ちゃんと結果の違いが確認できるように、100レコード程度のデータを作成する。 の制約で制作しています。 SQLに触って、まだあまり経っていないためどうプログラムを組めばいいのか分かりません。    テーブルの意味などや、キー項目、などの言葉の意味もあまり理解出来てません。 例えば データベース:ONLAINGAME テーブル1:MEMBER テーブル2:WEAPON を制作し、MENBERの中に50件、WEAPONの中に50件データを作ればいいのでしょうか。 データの作り方も少し心配です。 create table MENBERl(age int, name varchar(20) , primary key (aa); 上記の文を打ち、insert into MENBER ( age, name) values(20, 'takasi'); と書けば、制約通りデータが格納できるのでしょうか? 分かりずらいとは思いますが、詳しいお答えお願いいたします。

  • 途中からプライマリーキーを作成

    プログラム初心者です テーブルに途中からプライマリーキーを作成することはできますか? idとゆうカラムを追加で作成して主キーにしようとしたのですがエラーがでます idはint型でテーブルには100行あるのですが全部0になっているのが原因かもしれません このidカラムに1~100まで数字を与える方法はありますか? よろしくお願いします

    • ベストアンサー
    • MySQL