Oracle8,9でデータ結合とExcel出力の方法

このQ&Aのポイント
  • Oracle8,9でデータを結合するには、VBを使用してoo4oで接続し、SQL文を実行する方法があります。また、Oracleで一気にExcelに出力するには、Excelオブジェクトを作成し、結果をセルに書き込む方法が一般的です。
  • 具体的な手順としては、まずOracle9の実績テーブルから条件に合うデータを取得し、商品名と機械No.をキーにしてOracle8の計画目標テーブルから計画生産数を取得します。その後、取得したデータをExcelオブジェクトに書き込み、完成一覧表を作成します。
  • 上記の手順で実績テーブルと計画目標テーブルを結合し、一気にExcelに出力することができます。VBを使用してSQL文を実行し、取得したデータをExcelオブジェクトに書き込むことで効率的に処理することができます。ハッシュタグとしては、#Oracle #データ結合 #Excel出力 などが考えられます。
回答を見る
  • ベストアンサー

Oracle8,9で取得したデータを結合するには?Oracleで取ったデータをExcelに出力するには?

こんにちは。PRGで行き詰まってしまい皆様のお知恵を借りたいと思い投稿しました。 まだOracle初心者のへっぽこシステム管理ですが、お上よりDB(Oracel)からある条件でデータを取って来て Excelに出力してほしいと頼まれました・・ 生産実績管理サーバー(Oracel9)の実績テーブルには、 生産日|工場No.|商品名|機械No.|生産数| 4/1|100|ケーキ|A|100| 4/1|100|ケーキ|A|120| 4/1|100|チョコ|A|150| 生産計画目標サーバー(Oracel8)の計画目標テーブルには、 機械で出来る計画能力が入っております 工場No.|商品名|機械No.|計画生産数| 100|ケーキ|A|150| 100|チョコ|A|150| 上記のテーブルのデータをVBでoo4oで接続して、Excelに出力したのです。 Excelへの完成一覧表は、条件で生産日を4/1で、工場を100で、 商品名|機械No.|生産数|計画生産数| ケーキ|A|220|150| チョコ|A|150|150| にしたいのです。 【VB】 Set oraSes = CreateObject("OracleInProcServer.XOraSession") Set ora9 = oraSes.OpenDatabase("実績","実績/実績”,0&) Set ora8 = oraSes.OpenDatabase("計画","計画/計画”,0&) strSQL1 = "select 商品名,機械No.,Sum(生産数) from 実績 " & _ "where 生産日='4/1' and 工場名='100' " "group by 商品名,機械No. order by 商品名,機械No." Set oraDs9 = ora9.DbCreateDynaset(strSQL1,4&) strSQL2 ="select * from 計画目標" Set oraDs8 = ora8.DbCreateDynaset(strSQL2,4&) Excel起動(省略) Excelに書き込む・・・・ これが現在までのPRGなのですが、oraDs9で取得して来た商品名と機械No.をKeyにして Oracel8の計画目標テーブルから計画生産数を取得、それを結合して、一気にExcelに書き出したいのです。 oraDs9の商品名と機械No.を配列変数に入れて、Doでora8へSQL文を回すようなやりかたはあまりしたくないのです。 Oracleで一気に検索して、上記の欲しい一覧表を取得できたら最高なのですが・・・・ またExcelに書き出す方法は、ExcelでoraDs8をDo~Loopで書き出していくしか無いのでしょうか? 書き出すサンプルソース・参考になるようなものがありましたら教えて下さい。 もしOracelで、一気にExcelに書き出せる方法がありましたら教えて下さい。 色々と聞いてしまって申し訳ございませんが、何卒宜しくお願いします。

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

質問者が選んだベストアンサー

  • ベストアンサー
  • 3rd_001
  • ベストアンサー率66% (115/174)
回答No.1

異なるデータベース間のデータを使用する方法は以下があります。 (1)データベースリンクを使用する (2)ファイル経由でどちらかのDBに必要なデータを集める。 データウェアハウスを構築するなら相互参照可能な環境を構築すべきです。 それが出来れば、UNIONなりジョインなりで集計可能でしょう。 あと、計画と実績って、オーダーに対して発生しますが、 以下のような場合を考慮できているんでしょうか。 オーダーA ■ケーキを4/1に1000個作る計画 ■それに対して4/1に500個の実績、4/2に500個(計画遅れ)の実績 オーダーB ★ケーキを4/2に1000個作る計画 ★それに対して4/2に500個の実績、4/9に500個(計画遅れ)の実績 これを日単位の集計のみで見てもあまり意味がないと思います。 以下のように累計で集計した上でZグラフで見ないと 計画の進捗率などは把握できないと思います。 日  計画  実績 計画累計 実績累計 -------------------------------------------- 4/1 1000  500  1000   500 4/2 1000  1000 2000   1500 4/9 -   500  2000   2000 4/2の実績はオーダーAの計画が1000に対してAとBの実績が合算して1000になっており、計画通りに見えてしまいます。 ※累計でみると4/2は500個の遅れが発生してます。 私が関わったシステムと考え方やデータの持ち方が異なっていて 問題がなければいいのですが。

nisebe0612
質問者

お礼

回答の方、遅くなり大変申し訳ございませんでしたTT 大変勉強に成りました!! 本当に感謝しております☆ 考慮点は脱帽でした^^ 今後共宜しくお願いします。

関連するQ&A

  • AccessからExcelへの出力

    質問します。 AccessからExcelへ、VBAで指定セルに指定データを落としこむコーディングをしています。 とあるサイトを参考に、下記のコードを組みましたが、実行すると砂時計のまま動かなくなってしまいます。 何が悪いのでしょうか? SQLでしょうか? 時間がなくて困っています。 何卒よろしくお願いします。(><) Option Compare Database Private Sub output() On Error Resume Next Dim app As Object Set app = CreateObject("Excel.Application") Dim oRs As Recordset Dim strSQL As String Dim Wb As Excel.Workbook Dim Ws As Excel.Worksheet Dim FileName As String Dim Worksheet As String Dim X As Long Dim Y As Long FileName = "C:\nouhinnsyo.xls" 'エクセルのファイル名 Worksheet = "納品書" 'ワークシート名 Set Wb = app.Workbooks.Open(FileName) 'ワークブックの指定 Set Ws = Wb.Worksheets(1) 'ワークシートの指定 strSQL = "SELECT 日付,伝票番号,品番,商品名,出庫数,摘要" strSQL = strSQL & vbCrLf & "FROM 棚卸マスタ" '出力用レコードセット Set oRs = CurrentDb.OpenRecordset(strSQL, dbOpenDynaset) Y = 12 X = 0 Do Until oRs.EOF Ws.Cells(Y, X + 1) = oRs("日付") Ws.Cells(Y, X + 2) = oRs("品番") Ws.Cells(Y, X + 3) = oRs("商品名") Ws.Cells(Y, X + 4) = oRs("出庫数") Ws.Cells(Y, X + 9) = oRs("摘要") oRs.MoveNext Y = Y + 1 Loop oRs.Close Wb.SaveAs FileName 'ファイルの保存 Wb.Close 'ワークブックのクローズ Ex.Quit 'エクセルセッションをクローズする。 Set Ws = Nothing '変数の初期化 Set Wb = Nothing '変数の初期化 Set Ex = Nothing '変数の初期化 Set oRs = Nothing End Sub

  • 複数のテーブルを使用する時は・・・・

    SQLについて教えてくださいぃ~使用しているのは、”Oracle SQL+”です自分はある工場のへっぽこシステム管理者ですが、お上よりSQLを駆使して下記の条件の表を作ってと頼まれました... <生産>,<不良>,<不良内容>テーブルを使用して表を作りたいのですが・・ <生産>テーブル 日付  |生産工場No.|機械No. | 商品名 | 生産数 | 2008/3/29  | 100   | A   | チョコ | 300 | 2008/3/29  | 100   | A | チョコ | 450 | 2008/3/29 | 100   | B | 板チョコ | 600 | <不良>テーブル 日付 | 生産工場No. | 機械No. | 商品名 | 不良モード |停止時間(分)| 2008/3/29 | 100 | A | チョコ | カケ | 4 | 2008/3/29 | 100 | A | チョコ | カケ | 8 | 2008/3/29 | 100 | A | チョコ | 曲げ | 10 | 2008/3/29 | 100 | A | チョコ | 汚れ | 5 | 2008/3/29 | 100 | B | 板チョコ | カケ | 4 | 2008/3/29 | 100 | B | 板チョコ | カケ | 8 | 2008/3/29 | 100 | B | 板チョコ | キズ | 8 | <不良モード>テーブル 生産工場 | 不良モード | マシン要因 | 人的要因 | 100 | カケ | ☆ | | 100 | 曲げ | | ☆ | 100 | 汚れ | | ☆ |  100 | キズ | | ☆ | 100 | 溶け | | ☆ | 100 | 割れ | ☆ | | 100 | ヒビ | ☆ | | 上記3つのテーブルを使って下記の表のように集計したいのです。 ↓↓↓ 機械No. | 商品名 | 生産数 | カケ停止時間(分)| 人的要因での停止時間(分)| A | チョコ | 750 | 12 | 15 | B | 板チョコ | 600 | 15 | 8 | 【条件】 (1) 製造工場が’100’ (2) 日付が’2008/03/29’ 各テーブルにおいてのクエリは出来たのですが、結合すると集計が・・・・・・ <生産>にて、 select 機械No.,商品名、sum(生産数) from 生産 where 製造工場='100' and 日付='2008/03/29' group by 機械No.,商品名 order by 機械No.,商品名 <不良>にて、 select 機械No.,商品名、sum(停止時間) from 不良 where 製造工場='100' and 日付='2008/03/29 and 不良モード='カケ' group by 機械No.,商品名 order by 機械No.,商品名 <不良> <不良内容>にて、 select 機械No.,商品名、sum(停止時間) from 不良,不良モード where 製造工場='100' and 日付='2008/03/29 and 不良モード<>'カケ' and 人的要因='☆' group by 機械No.,商品名 order by 機械No.,商品名 この3つのテーブルを使って、一覧が一度に出来れば助かるのですが、せめて <生産>,<不良>のテーブルで機械No.,品名,生産数,カケ停止時間(分)までは出力したのです。 まだ未熟者ですので、皆様の御力を借りれれば幸いです。お願いします ※図の方が判りづらくて申し訳ございません。

  • エクセルで複数の積み上げグラフを作成したい

    エクセルでグラフを作成する際の質問です。 1つのグラフエリアの中に、ある会社の製品の各国工場での「生産計画数」と「生産実績数」を横に並べて国別に棒グラフで積み上げて作成したいと思っています。 y軸は生産数量、X軸は月で表します。 元となる表が「生産計画」と「生産実績」で2つできると思うのですが、この2つの表を同じグラフエリアに入れて比較することは可能でしょうか? 自分でいろいろ調べてみたのですが、どうしてもわからなく、ご指導いただければ幸いです。 表が使えないので、文章で上手く説明できているかわからないのですが、教えていただければ嬉しいです。 宜しくお願いいたします。

  • ExcelデータをUserFormへ

    教えて下さい! 今、UserFormに【TextBox1】・【TextBox2】・【TextBox3】・【CommandBottum1】があります。 【TextBox3】にExcelの「No.」を入力して【CommandBottum1】(検索)をクリックしたら【TextBox1】に「商品名」・【TextBox2】に「金額」を表示させたいのですが、どのように行えばよいでしょうか? ちなみに、データは1~7行目までブランク、8行目はタイトル、9行目から始まります。     A    B    C 1 ・ ・ 8   No.   商品名   金額 9   1   ○○○○   80 10   2   △△△△   100 11   3   ××××   150 12   4   ■■■■   200  13   ・    ・        ・ 14   ・    ・        ・  ・    ・    ・       ・ ・    ・    ・       ・

  • Excel VBA で Oracle CLOB型カラムの文字列を取得する方法

    Excel VBA を使用して、Oracleに格納されている文字列を取得しようとしています。 Number型やVarchar2型のカラムからは問題なく取得できるようになったのですが、CLOB型で文字列を格納しているカラムからの取得でつまずいています。 自分の書いた方法だと、1600バイト以上の文字列が格納されているとエラー文字が返ってきてしまいます。 これ以上の文字数を取得する方法について教えてもらえないでしょうか? '---// コード抜粋 ココから //--- 'ORAセッション生成 Set OraSession = CreateObject("OracleInProcServer.XOraSession") 'ORADB生成 Set OraDatabase = OraSession.OpenDatabase(<<dbname>>, <<id>> & "/" & <<passwd>>, 0) Dim SQL As String '一覧取得用SQL Dim RS As Object 'レコードセット SQL = " SELECT <<<clob_col_name>> FROM <<table_name>> " Set RS = OraDatabase.DbCreateDynaset(SQL, 0&) Range("A1").Value = RS.fields("<<clob_col_name>>").GetChunk(0, 3263) RS.Close '---// コード抜粋 ココまで //--- 環境は、Excel 2003、Oracle 9iです。 ひとつよろしくお願いいたします。

  • Excelでのデータ入力

    今、Excelで商品の集計表を作成しています。セルAに商品番号を入れ、隣のセルBに商品名を入力しているのですが、商品数が多いのでいちいち番号と名前を入力するのが大変です。商品番号を入力すれば、反映して商品名が自動で入る方法はないでしょうか。 教えてください。宜しくお願いします。

  • 2つのエクセルファイルの結合

    エクセルファイルで以下の操作を実施したいと考えているのですが、 これら操作をする場合は、VBAでしたら実現可能でしょうか? その場合、どのくらいVBA習得に時間がかかりますでしょうか? 又はVBAでなく、他に負荷が低く実現可能な方法があれば教えて下さい。 今後もカスタマイズすることがあると思うので、自分で実施したいのですが、 VBAの知識がゼロのため、SOHOさんに頼んで作ってもらおうか悩んでます。 宜しくお願い致します。 ~~~~~~ エクセルで2つのファイルがあるとします。 ファイルの内容は、物販の仕入れ先の情報で、  商品番号、商品名、メーカー、価格、在庫数、重量などです。  1つのファイルがA社からの仕入れ情報、もう1つがB社からの仕入れ情報。 この2つのファイルの内容を結合して別エクセルへ出力したいと考えております。 結合時にやりたい事。  ・同じ商品番号の価格の差分を計算したい。  ・在庫数が例えば3個以下のものは省きたい。  ・価格が5万以上の商品を省きたい。  ・重量から送料を計算したい。   グラム単位で100円かけるなど。 ・  ・商品名、メーカーであるキーワードを省きたい。  ・結合した情報を別のエクセルで出力したい。

  • エクセルで2つのデータを1つに統合させるには

    職場でのエクセルデータ作成に困っています。 店舗での販売商品の数量管理です。 ファイル1:在庫数量    商品名   月日   在庫数   A   B   C   D   E ファイル2:注文数量  商品名   月日   注文先 注文数   A   C   E  以上のような2つのデータファイルを1つのシートにまとめたいのですが、 どうしたらいいのでしょうか。 ファイル1とファイル2では、商品名の列がすべて同一でないので、 どうやって結びつけたらいいか、困っています。 どなたか方法をご存知でしたらお教えください。

  • ACCESSでExcelにデータ出力、高速化

    ACCESSのVBAを使ってテーブルのデータを 既存ブックに出力し、別名で保存をしたいのですが、 どうも、処理が遅くて困っています。 改善点がありましたら教えてくださいお願いいたします。 Dim objExcel As Excel.Application Dim xlWrkbk As Excel.Workbook Dim xlWrksh As Excel.Worksheet Dim rs As DAO.Recordset Dim strFilename As String strFilename = CurrentProject.Path & "既存ブック名.XLS" Set objExcel = New Excel.Application Set xlWrkbk = objExcel.Workbooks.Open(Filename:=strFilename, ReadOnly:=True) Set xlWrksh = xlWrkbk.Worksheets("シート名") Set rs = CurrentDb.OpenRecordset("テーブル名", dbOpenSnapshot) With objExcel xlWrksh.Range("A:N").Clear xlWrksh.Range("A2").CopyFromRecordset rs xlWrkbk.SaveAs Filename:=CurrentProject.Path & "新しいブック名.xls" xlWrkbk.Close .Quit rs.Close End With Set rs = Nothing Set objExcel = Nothing Set xlWrkbk = Nothing Set xlWrksh = Nothing

  • エクセルとCSVデータの統合

    教えてください。 エクセルデータとCSVデータの二つのデータを関連付けて統合したいのですが、 統合元となる、1つ目のエクセルデータ「A」には 商品別にシートを分けた(1)商品ナンバーの一覧があります。 2つ目のCSVデータ「B」には すべての商品が入れ混ざった(不要な商品も含まれてます) (1)商品ナンバーと(2)管理ナンバーが入っています。 そこで、Aのデータの(1)商品ナンバーを元にBのデータの(2)管理ナンバーを関連付けて統合したいのですが データが200件以上あり手入力で作業するとなると 誤入力が起こる可能性があり、また時間もかかるので スムーズにデータの統合が出来る方法があれば教えていただきたいです。 エクセルをあまり使い慣れていない為、不十分な説明で申し訳ございませんがご教示のほど宜しくお願い致します。 ちなみに、Excel2000を使っています。