Oracle10gのテーブルに登録されているデータをある条件で
抜き出しテキストデータを作成したいのですが、簡単な方法はありますでしょうか。SQLコマンドも初心者レベルですので、
良い方法を教えてください。よろしくお願いします。

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

A 回答 (4件)

ご自分で使いやすいツールを作るのが、後々便利かとは思いますが..



先人が既に作ったものを利用されるのも良いかと。

この手のツールは、かなりたくさん存在するので、使いやすいモノを
探してみると良いでしょう。
http://www.vector.co.jp/vpack/filearea/win/busin …

参考URLのは、ズバリそれですが、使いやすいかどうかは存じません。

参考URL:http://www.vector.co.jp/soft/win95/business/se27 …
    • good
    • 0
この回答へのお礼

本当に沢山ありますね。今、いろいろ試しています。
ありがとうございます。

お礼日時:2005/04/22 23:03

王道はSQL*Plusを使ってスクリプトを流す事ですが、


手抜きのやり方の一つには、ODBC経由でExcelのSQLクエリーを発行して、それをCSVかTXT形式でセーブすると言うやり方があります。

Perl+DBD+DBI:OracleやJava+JDBCを使うなど他にもいろいろやり方はありますが。

参考URL:http://www.atmarkit.co.jp/fwin2k/win2ktips/296ex …
    • good
    • 0
この回答へのお礼

やはり、SQL*Plusが普通なのですね。
ただ、ODBCでの方法も今後、試したいと思います。

お礼日時:2005/04/22 23:11

Microsoft Accessをお持ちでしたらODBC経由で取り出すという手段もあります。

    • good
    • 0
この回答へのお礼

ODBC経由は、以前から試してみようと思っていました。が、時間がとれなくて、何も進んでいません。
これから、試してみようと思います。

お礼日時:2005/04/22 23:15

データを抽出するSQLスクリプトをSQL*Plusで実行する――というのが、よくある手かと。



参考URL:http://www.oracle.com/technology/support/tech/sq …
    • good
    • 0
この回答へのお礼

DBとIAS(9iまでは、OAS)も使用しています。両方監視できるマネージャーで、SQL*Plus
が使える事がわかりました。ありがとうございました。

お礼日時:2005/04/22 23:08

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

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

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

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

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

Q大量のCSVファイルをExcel形式に変換する

お世話になります。
大量のCSV(.csvファイルをExcel(.xls)ファイルに変換したい
と考えております。
リネームソフトを使って、(.csv)⇒(.xls)の一括変換を
したところ、拡張子は確かに.xlsに変換されたのですが、
中身はCSVのままとなっておりました。
(↑ファイル名とシート名が同期を取っているので)

このCSVを確実にエクセル形式へと変換したいのですが、
どなた様かいいお考えをお持ちでしたら教えてください。
ググってみたところ、そういったアドインがあるのですが、
できれば費用をかけずに行いたいです…。

Aベストアンサー

こんにちは。

すでに、マクロが1つ出ているようですが、私も作ってみました。

これは、ファイルをマルチセレクトして、そのファイル群を、Excelのマクロにより、一気に、CSV から XLS(Excel標準フォーマット)変換するマクロです。出来上がったら、Explorer 等で、確認してみてください。

>アドインがあるのですが、
私の個人的な意見ですが、この程度のものは、アドイン化すべきものではありませんから、よほど付加価値をつけないと公開用のアドインにはなりませんが、一般的にみて、アマチュアの作ったアドインは、押しなべて、あまり出来の良いものが少ないように思います。ですから、なるべく、一般のマクロで解決するように望みます。


'---------------------------------------------------

'<標準モジュール>
Sub CSV2XLS()
  'CSV を XLS に変換するマクロ
  Dim myArray() As String
  Dim FileName As Variant
  Dim fn As Variant
  Dim xlFileName As String
  Dim xlFileBaseName As String
  Dim TextLine As String
  Dim FileNo As Integer
  Dim i As Long
  Dim k As Long
  '基本となるフォルダ
  'BASE_DIR=""なら、マクロのあるブックと同じ場所のフォルダ
  Const BASE_DIR As String = ""
  If BASE_DIR <> "" Then
   ChDir BASE_DIR
   Else
   ChDir ThisWorkbook.Path
  End If
  FileName = Application.GetOpenFilename("CSV ファイル(*.csv),*.csv", MultiSelect:=True)
  If VarType(FileName) = vbBoolean Then
   Exit Sub
  End If
  Application.ScreenUpdating = False
  For Each fn In FileName
   On Error GoTo NextStatus
   With Workbooks.Open(fn)
     xlFileName = Mid$(fn, 1, InStrRev(fn, ".") - 1) & ".xls"
     Do
      k = k + 1 '同名の時枝番をつける
      If k > 3 Then Exit Do
      If Dir(xlFileName) = "" Then
        .SaveAs xlFileName
        xlFileBaseName = Mid$(xlFileName, InStrRev(xlFileName, "\") + 1)
        Workbooks(xlFileBaseName).Close False
        k = 0
        Exit Do
        Else
        xlFileName = Mid$(fn, 1, InStrRev(fn, ".") - 1) & "_" & CStr(k) & ".xls"
      End If
     Loop
   End With
NextStatus:
  Next fn
  Application.ScreenUpdating = True
  MsgBox "終了しました。",64
End Sub

'---------------------------------------------------

こんにちは。

すでに、マクロが1つ出ているようですが、私も作ってみました。

これは、ファイルをマルチセレクトして、そのファイル群を、Excelのマクロにより、一気に、CSV から XLS(Excel標準フォーマット)変換するマクロです。出来上がったら、Explorer 等で、確認してみてください。

>アドインがあるのですが、
私の個人的な意見ですが、この程度のものは、アドイン化すべきものではありませんから、よほど付加価値をつけないと公開用のアドインにはなりませんが、一般的にみて、アマチュアの...続きを読む

QOracleのSQLで同テーブルのカラムをコピー

oracle9iを使用しています。

あるテーブルに新しい列を新規追加し、そのカラムに既存列のデータをそっくりそのままコピーしたいのですが、どのようなSQLを流せばよいのでしょうか?

初心者丸出しな質問で申し訳ありませんが、ご教授頂けましたらありがたいです。
よろしくお願い致します。

Aベストアンサー

データ件数がどのくらいあるのか分かりませんが、1万件以下くらいなら、update一発でいいでしょう。

update 表名
set 新しい列=既存の列

QエクセルデータからCSVファイルへの変換について

現在エクセルファイルにあるデータをCSVファイルへ変換する作業(エクセルでデータを作成して、保存時にCSVファイルを選択)をしているのですが、以下の例の場合うまく変換ができません・・・。
基本的な質問かもしれませんがどなたかご存知でしたら教えていただけると助かります。
よろしくお願いします。

【例】
        (エクセル) ⇒  (CSV)

うまくいく   12345     12345

うまくいかない 01234     1234


上記のようにエクセル上は文字列で管理されている
ケースだとCSVファイルに変換した時数列に変換
され、上記例のうまくいかないケースのように
頭に0がある場合CSVだと0が消えてしまいます。

よろしくお願いします。

Aベストアンサー

> CSVファイルに変換した時数列に変換

ちがいます。
いったんCSVで保存したものをエクセルで開いたときにそうなるのです。
CSVをエクセルでそのまま開かず、メニューの「データ」、「外部データの取り込み」、「すべてのファイル」、で取り込み、書式で文字列を選べばOKです。
あるいはCSVを拡張子を.TXTにしてテキストで取り込んでもOK

QORACLEテーブルを作成したSQLを調べたい

バックアップに別サーバに同じORACLEテーブルを作成することとなりました。
どんなSQLでそのテーブルを作成したのか資料が無くてわかりません。
調べる方法を教えてください。よろしくお願いします。

Aベストアンサー

下記のWordをKeyにしてGoogle先生に聞いてください。

DBMS_METADATA
GET_DDL

QCSVファイルをEXCELに変換の自動化作業

CSVファイルをEXCELに変換の自動化作業
{CSVファイルをEXCELに変換するため、
excel  ツールバーよりデータ(D)→外部データの取り込み(D)→テキストファイルのインポート→ファイルの種類変更→全てのファイル→○○.csvのファイル指定→“,”の区切り選択、、ウィザードに従って変更し次へで進む→A1が指定されるのでそのまま完了→CSVがEXCELファイルに変換された。
参照したabc1.csvの名前に対して新しいabc1.xlsとなずけて登録する。これらの作業をMYドキュメントのhenkan ホルダーに入っているCSVファイルに同様に作業して同じくhenkan ホルダーに入れる。}
上記の{ }内の作業を何か,excelのVBAのマクロのようなもので実行することはできませんか。
やり方を教えてください。

Aベストアンサー

もともと、CSVとはカンマ区切りのはずですから、そうではないということなら、このコードは、違っています。こういう質問系掲示板は、質問者が分らない部分をお助けするような形で出来上がるものだと思いますので、回答者の回答を最初から否定するような発言は控えていだきたいと思いました。なお、フォルダーの中を一気に変換してしまうようなコードは、必ず変換後の様子を確認してからでなくてはなりませんので、それを確認していただくつもりでした。

私自身は、ここのカテゴリで、私は、一ゲンではありませんので、後々のためにコードを掲示しておきます。以下は、私が考えていたコードであって、その処理後の状態を保証するものではありません。

'<標準モジュール推奨>
Sub DirectryCSV2XLS()
  Dim myCSVFnames() As String
  Dim myCSVFname As String
  Dim xlFileName As String
  Dim i As Long
  Dim j As Long
  Dim n As Variant
  Dim msg As String
'=====================================
  '以下 フォルダー要設定
  Const MY_FOLDER As String = ""C:\Documents and Settings\<User>\My Documents\"
'=====================================
  If Left$(MY_FOLDER, 1) <> "\" Then MsgBox "フォルダーの設定の最後は、「\」が必要です。": Exit Sub
  If Dir(MY_FOLDER, vbDirectory) = "" Then _
   MsgBox "そのフォルダーは存在しません。", vbCritical: Exit Sub
 
  myCSVFname = Dir(MY_FOLDER & "*.csv")
  Do While myCSVFname <> ""
   ReDim Preserve myCSVFnames(i)
   myCSVFnames(i) = myCSVFname
   i = i + 1
   myCSVFname = Dir()
  Loop
  If i = 0 Then MsgBox MY_FOLDER & " には、CSVファイルが存在しません。", vbCritical: Exit Sub
  Application.ScreenUpdating = False
  Application.DisplayAlerts = False
  For Each n In myCSVFnames
   xlFileName = Mid$(n, 1, InStrRev(n, ".csv")) & ".xls"
   If Dir(MY_FOLDER & "\" & xlFileName) = "" Then
     With Workbooks.Open(MY_FOLDER & "\" & n, Format:=2)
      .SaveAs MY_FOLDER & xlFileName
      Workbooks(xlFileName).Close False
      j = j + 1
     End With
   End If
  Next n
  Application.DisplayAlerts = True
  Application.ScreenUpdating = True
  If i <> j Then msg = "既に" & CStr(i - j) & "個のCSV ファイルは、XLSに変換されています。"
  MsgBox i & "個のCSVの内、" & j & "個のファイルをXLSに変換しました。" & vbCrLf & msg
End Sub

もともと、CSVとはカンマ区切りのはずですから、そうではないということなら、このコードは、違っています。こういう質問系掲示板は、質問者が分らない部分をお助けするような形で出来上がるものだと思いますので、回答者の回答を最初から否定するような発言は控えていだきたいと思いました。なお、フォルダーの中を一気に変換してしまうようなコードは、必ず変換後の様子を確認してからでなくてはなりませんので、それを確認していただくつもりでした。

私自身は、ここのカテゴリで、私は、一ゲンではありませ...続きを読む

QOracle SQL 2つのテーブルを使用する書き方について

OracleSQLどころかSQLが初めてなのですが、以下のような事がしたいんです。

金額テーブル       品名マスタ
品名コード 品名 金額  品名コード 品名コード名
1      ○○ \100   1      1の名前
1      ○× \250   2      2の名前
2      △△ \200  

この2つを使用して

品名 品名コード1の金額 品名コード2の金額 

というテーブルをSQL上で書きたいのですが、可能でしょうか?
可能であればどういう書き方にするといいのかご指導宜しくお願いします。

Aベストアンサー

SQL自体が初めてということなので質問自体が少し
的を得ていないような気がしますので確認させてください。
(質問に対して質問で返してしまい、申し訳ありません。)

最終的には
「品名 品名コード1の金額 品名コード2の金額」
といった形のテーブルを作りたい
(「SQL上で書きたい」という表現が良く理解できなかったので、「作りたい」という意味と当方で勝手に捕らえました。)
ということだと思うのですが、

品名も品名コード1の金額も品名コード2の金額も全てもとの金額テーブルにある列なので品名マスタは必要無いということになります。
(品名コード名を表示するとき以外は品名マスタは要らないですし、
 そもそもこの表の名前自体品名コード名マスタという表名にするべき)

また、元の金額テーブルでは品ごとにレコード(行)がありますが、
「品名 品名コード1の金額 品名コード2の金額」
といった形のテーブルを作りたいということであれば1行に
元表の1行を押し込めることになりますのでsumやcountといった
グループ関数というものを用いることが必要になってきます。

そもそも金額テーブルにおいて品名が○○と○×と違うのに
品名コードが同じ1でよいのでしょうか?
少しやりたいことがわからないのでもう少し質問文を修正していただいてもよろしいでしょうか。

回答についてはそれからさせてもらいたいと思います。

SQL自体が初めてということなので質問自体が少し
的を得ていないような気がしますので確認させてください。
(質問に対して質問で返してしまい、申し訳ありません。)

最終的には
「品名 品名コード1の金額 品名コード2の金額」
といった形のテーブルを作りたい
(「SQL上で書きたい」という表現が良く理解できなかったので、「作りたい」という意味と当方で勝手に捕らえました。)
ということだと思うのですが、

品名も品名コード1の金額も品名コード2の金額も全てもとの金額テーブルにある列な...続きを読む

QCSVをExcelに変換したい

お世話になります。

CSVファイルをExcelファイルに変換する場合、CSVファイルをExcelで開いて拡張子を「xls」もしくは「xlsx」を指定して保存すればよいかと思いますが、PCにExcelがインストールされてない環境の場合、Excelに変換することは不可能でしょうか。

今回、Accessにてツールを作成し、CSV(カンマ区切り)のデータを読み込もうとしておりますが、そのデータの中には単語の中にカンマが含まれているものがある為、普通にCSVをインポートしようとすると、ズレてしまいます。

なので、インポートする前準備としていったんExcelに変換したいと考えているのですが。。そのPCにExcelがインストールされてないと、やはり変換することは出来ないでしょうか。

もしくは、カンマ区切りのCSVファイルをタブ区切りに変換したりすることは出来ますでしょうか。

ご教授の程、宜しくお願い致します。

Aベストアンサー

>Accessにてツールを作成し、CSV(カンマ区切り)のデータを読み込もうとしておりますが、そのデータの中には単語の中にカンマが含まれているものがある為、普通にCSVをインポートしようとすると、ズレてしまいます。

毎回同じCSVのフォーマットだったら
(項目数やデータ型など)
一度インポートウィザードで進めて行って
設定ボタンから定義を保存し
次回からはその定義名を使用してインポートしては?
VBAならDocmd.transferText のヘルプにあるSpecificationNameに定義名を入れます。
・・・じゃダメかいな?

>インポートする前準備としていったんExcelに変換したい
CSVファイルを直接開くとExcelのお節介機能で
電話番号などの前ゼロがなくなったり、ハイフン付きのデータが日付と解釈されたり・・・
ということががあるので、拡張子CSVをTxtに変えてから
Excelで開こうとするとウィザードが立ち上がって・・・と出来ますが
結局のところ二度手間です。

ご参考まで。

QOracle10gで1つのSQLで複数回同じテーブルを結合する場合のパ

Oracle10gで1つのSQLで複数回同じテーブルを結合する場合のパフォーマンス向上

Oracleで1つのSQL内で同じテーブルを2回以上結合すると結果出力にかかる時間が非常に遅くなります。
例: SELECT * FROM A, B b1, B b2 WHERE a.id = b1.id AND a.id = b2.id
(テーブルBを2回結合している)

こういう場合にパフォーマンスを落とさない方法はありますか?テンポラリテーブルでテーブルBのレプリカを作成して使用するというのはなしです。あくまで1つのSQLで結果出力できることを前提にパフォーマンスを向上する方法を教えてください。

Aベストアンサー

SELECT * FROM A, B b1, B b2 WHERE a.id = b1.id AND a.id = b2.id
ここの「テーブルBを2回結合している」-> 意味ない。
->
SELECT * FROM A, B b1 WHERE a.id = b1.id → 結果件数同じです。

実行時間テスト。
テーブルA/Bのデータ件数=10000件

******* VISUAL SQLTOOLS - Log ************
14:38:04:890 SQL: SELECT * FROM TEST_TABLE , TEST_TABLE1 b1 , TEST_TABLE1 b2 WHERE TEST_TABLE.id = b1.id AND TEST_TABLE.id = b2.id
->: 10000 件 0.562秒

14:38:05:546 SQL: SELECT * FROM TEST_TABLE , TEST_TABLE1 b1 WHERE TEST_TABLE.id = b1.id
->: 10000 件 0.390秒

14:38:05:984 SQL: SELECT TEST_TABLE.ID FROM TEST_TABLE , TEST_TABLE1 b1 , TEST_TABLE1 b2 WHERE TEST_TABLE.id = b1.id AND TEST_TABLE.id = b2.id
->: 10000 件 0.078秒

14:38:06:125 SQL: SELECT TEST_TABLE.ID FROM TEST_TABLE , TEST_TABLE1 b1 WHERE TEST_TABLE.id = b1.id
->: 10000 件 0.062秒

ご参照ください。

SELECT * FROM A, B b1, B b2 WHERE a.id = b1.id AND a.id = b2.id
ここの「テーブルBを2回結合している」-> 意味ない。
->
SELECT * FROM A, B b1 WHERE a.id = b1.id → 結果件数同じです。

実行時間テスト。
テーブルA/Bのデータ件数=10000件

******* VISUAL SQLTOOLS - Log ************
14:38:04:890 SQL: SELECT * FROM TEST_TABLE , TEST_TABLE1 b1 , TEST_TABLE1 b2 WHERE TEST_TABLE.id = b1.id AND TEST_TABLE.id = b2.id
->: 10000 件 0.562秒

14:38:05:546 SQL: SELECT * FROM TEST_TABLE , T...続きを読む

QCSV形式に変換

プログラミング(C言語)で、ファイルの内容をCSV形式に変換し、指定した出力ファイルに出力するプログラムを作成せよ。という課題がありましたが、
ファイルの内容をCSV形式に変換
がわかりません。どのようなプログラムをかいたらよいのでしょうか?

Aベストアンサー

#5です。
よく見たらフィールド内での入れ替えが居るようなので、
#5で書いたやり方ではできませんね。。。
#参考だしいいのかな。。。

読み込みを一行ずつにして、
中を入れ替えて・・・
という作業が必要になります。

Qoracleのsqlについて質問です。 TESTというテーブルがあり、その項目には時間と名前と値があ

oracleのsqlについて質問です。
TESTというテーブルがあり、その項目には時間と名前と値があります。

[TESTテーブル]
TIME NAME ATAI
--------------------
06:00 A 2
08:00 B 3
05:00 C 1
06:00 C 4
06:00 A 2

select文で現在は以下の条件でspoolしてログ出力させているのですが、
select name,avg(ATAI)
from TEST
where TIME >= 06:00
and TIME < 07:00
and NAME in(A,B,C)
group by NAME;

上記の結果が、
NAME ATAI
--------------
A 2
C 4

となり、NAMEのBが出力しない状態です。
ログ出力させたから、その後でエクセルのマクロで集計をするのですが、毎回Bを手で入力してからマクロを実行してと大変なため、

NAME ATAI
--------------
A 2
B 0
C 4

のように上記のwhereの条件にあってなくてもNAMEを強制的に表示させることは可能でしょうか?

oracleは11g
OSはlinuxです。

どなたかわかる方、いらっしゃいましたらご教授お願い致します。

oracleのsqlについて質問です。
TESTというテーブルがあり、その項目には時間と名前と値があります。

[TESTテーブル]
TIME NAME ATAI
--------------------
06:00 A 2
08:00 B 3
05:00 C 1
06:00 C 4
06:00 A 2

select文で現在は以下の条件でspoolしてログ出力させているのですが、
select ...続きを読む

Aベストアンサー

NAME自体を正規化していないのでしょうか?

もしそうであれば、発行したSQLにTESTテーブルに対して
(SELECT DISTINCT NAME FROM TEST)をサブクエリで
RIGHT JOINしてみてはいかがでしょうか?


人気Q&Aランキング

おすすめ情報