テーブルレイアウトの差異を見つけるための効率的な方法やフリーソフトについて教えてください

このQ&Aのポイント
  • SQL*Plusでテーブルの構造を表示するDESCコマンドを使用して結果をcsvファイルに保存する方法を知りたいです。現在の方法ではカンマ区切りにならないため問題が発生しています。また、テーブルの構造の差異を見つける作業を効率的に行うための方法やフリーソフトを探しています。
  • Oracle for Windows 95のSQL*Plus Ver3.3.3.0.0を使用していますが、DESCコマンドを使用してテーブルの構造を表示し、結果をcsvファイルに保存する際にカンマ区切りにする方法を知りたいです。現在の方法ではカンマ区切りになりません。
  • また、テーブルの構造の差異を見つける作業を効率的に行うための方法やフリーソフトを教えてください。テーブルレイアウトの差異を見つけるためにどのようなツールや手法が利用できるか知りたいです。
回答を見る
  • ベストアンサー

テーブルレイアウトの差異

SQL*Plusでテーブルの構造を表示するDESCを使って、結果をSPOOLする際に csvファイルにしたいと思い SET HEADING OFF SET COLSEP "," SPOOL C:\WINDOWS\デスクトップ\スプール結果.txt DESC テーブル名 SPOOL OFF と実行してもカンマ区切りにならないのですが、DESCのときは出来ないのですか? Oracle for Windows 95のSQL*Plus Ver3.3.3.0.0を使用しています。 また、テーブルの構造の差異を見つける作業を行ないたいのですが、 効率の良い方法もしくはフリーソフトをご存知の方情報お願いします。 この質問がメインかな?

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

  • ベストアンサー
  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.1

RDBMSは自分の情報を管理するのにもRDBを使用しています。 つまり、テーブル情報などはテーブルに格納されています。Oracleではデータディクショナリと呼ばれているテーブルやビュー表です。 なので、そのテーブルを読めば、テーブルの構造も取得可能です。 dba_tables, dba_tab_columns という2つのテーブルを参照すればご希望の結果が得られると思います。

関連するQ&A

  • CSV出力スクリプトについて

    CSV出力のスクリプトを作成しました。 単純に1つのテーブルをそのままCSVで出力するだけです。 件数は60万件程度です。 問題は13,4件に1行改行されてしまいます。 この改行を省くことができるでしょうか? --CSV出力 -- set line 100 -- set echo off コマンド表示を抑止する -- set termout off 画面出力を抑止する -- set heading off 列タイトルの表示を抑止する -- set feedback off 結果メッセージの表示を抑止する -- set colsep ',' 列と列の区切りをカンマ(,)にする set line 100 set echo off set termout off set heading off set feedback off set colsep ',' /* spoolコマンドでファイル出力を開始する */ spool C:\tmp\sample.csv /* 問い合わせ結果がファイルtest.csvに出力される */ SELECT KAIIN_NO, STS_NO, SYOHIN_NO FROM SAMPLE; /* spool offでファイル出力を終了する */ spool off

  • DBからタブ区切りのCSVデータを抽出する

    DBからCSVにしてデータを取り出そうと、ネットで検索して みようみまねでやってみました。(下記の場合カンマ区切りですが) タブ区切りで整列したデータを抽出したいのですが、特に、 (4)のように隣合う項目の間がかなり離れていて見えにくい状態で CSVファイルが作成されてしまいます。 (1)のように整列した形で、タブ区切りのCSVデータを抽出するには、 どのようにしたら宜しいのでしょうか? (2)、(3)は、試してみた実行ファイルです。 環境は、oracle10g windowsXPです。 (1)目的の結果の表示------------------------------- 653-5689 ZM05 田中太郎 YOKOHAMAS 4 4  9 097005・・・・・ 以下試してみたbatファイルとsqlで抽出 (2)batファイル---------------------------------- sqlplus ABCD/ABCD@oracle.host1.ser @abc.sql (3)sqlファイル----------------------------------- set echo off set heading off set termout off set pause off set pagesize 0 set trimspool on set feedback off set colsep "," set term off spool hoge.txt select * from T_JUTYU; spool off exit (4)結果--------------------------------- 653-5689 ,ZM05 田中太郎 ,YOKOHAMASI 4, 4, , ,9 ,097005 , 1 ,18 , , , , , 0 ,asahi asahi ,08-12-23,08-12-23, ------------------------------------------------まで結果

  • CSV出力スクリプトについて

    CSV出力のスクリプトを作成しました。 単純に1つのテーブルをそのままCSVで出力するだけです。 件数は60万件程度です。 問題はたとえばKAIIN_NOの項目が桁数20桁の場合に出力されるCSVが20桁を超えて50桁くらいで出力されたりします。項目桁数と同じではなくてもよいのですが、空白を出力したくないです。 なにかよい方法はありますでしょうか? ※Select文でTrimをかけても効果はありませんでした。 --CSV出力 -- set line 100 -- set echo off コマンド表示を抑止する -- set termout off 画面出力を抑止する -- set heading off 列タイトルの表示を抑止する -- set feedback off 結果メッセージの表示を抑止する -- set colsep ',' 列と列の区切りをカンマ(,)にする set line 100 set echo off set termout off set heading off set feedback off set colsep ',' /* spoolコマンドでファイル出力を開始する */ spool C:\tmp\sample.csv /* 問い合わせ結果がファイルtest.csvに出力される */ SELECT KAIIN_NO, STS_NO, SYOHIN_NO FROM SAMPLE; /* spool offでファイル出力を終了する */ spool off

  • Oracleでの文字列連結サイズの上限

    Oracle9iでテーブル内容をスプール出力していますが、カラム単位で余白を削除したい (トリムをかけたい)ので以下のようにカラムを連結させてスプールしています。 set colsep ',' spool test.csv select a ||','|| b ||','|| c from test_table spool off 実際の項目数は100以上あり、レコードの最大長も数千バイトになりますが、 各項目にMAXの値を入力して上記スプールを実行したところ、以下のエラーメッセージが 出力されました。 「ORA-01489: 文字列を連結した結果、長さが最大長を超えました」 データを連結した結果の長さが上限を超えたということなのでしょうが、 この最大長はどこで設定されているものなのでしょうか? また、そもそもスプール出力でトリムが効かないためにこのようなやり方で 出力していますが、他によい方法をご存知の方いましたら教えて下さい。 よろしくお願いします。

  • 置換変数が再利用できない

    OracleのSQL*Plusで、&を使った置換変数を利用していますが、 「&&」にしても、毎回値の入力を求められます。 何が悪いのかわかりません。 どなたか教えてください。宜しくお願いします。 ---TEST.sql------------------------------- SET PAGES 0 SET COLSEP ',' SET LIN 1000 SET Trimspool on SPOOL c:\work\testresult.txt SELECT * FROM temp WHERE module_DATE BETWEEN '&StartDT' and '&EndDT'; SELECT * FROM temp2 WHERE module_DATE BETWEEN '&&StartDT' and '&&EndDT'; SPOOL OFF ------------------------------------------

  • OracleでCLOB型をファイル出力したい

    Oracle10gで、CLOB型を含むテーブルを全件ファイル出力しているのですが、CLOB型の項目は正常に出力されず、項目の内容が80byte位で切れてしまいます。 項目の内容が切れずにファイルに出力できる方法が知りたいです。 宜しくお願い致します。 ファイル出力の内容は以下の通りです。 ########################################################## set pages 0 set heading off set colsep '<ec>' set lines 3000 set feed off set trimspool on set define off set num 20 spool テーブル名.dat select /* FULL(テーブル名) */ 項目A,項目B,・・・・ from テーブル名; spool off ########################################################## ※項目は、全部で15項目あり、レコード長は135です。

  • オラクルでいうところのdescとspoolのサイベース版。

    サイベース初心者です(オラクルも初級者ですが・・・)。 オラクルではdescで表の情報をみたり、処理結果をspool~spool off で出力したりしますが、これと同じ機能をサイベースでやりたいのですが、どうなりますか? また、オラクルでテーブル全てを表示したいとき、 select table_name from user_tables (だったかな?(--;)) というのがあるとおもいますが、これをサイベースでやるときは どう記述したらよいでしょうか。 以上、ひとつでもご存知の方、ご回答よろしくお願いします。

  • 項目内の改行がレコードの終わりと判定されてしまう

    SQL*PLUSでORACLEデータを単純にテキストファイルに書き出したいのですが、項目内に「改行」があるとレコードが複数行に分かれていまい、上手くいきません。 項目内の「改行」のみ(レコード終端の本来の「改行」は残す)を削除して前詰めする(または空白に置き換える)方法をご存じの方ご教示いただけないでしょうか。 例) SET COLSEP ',' SPOOL D:\出力ファイル.txt SELECT      項目1 || 項目2 || 項目3 FROM テストテーブル ; SPOOL OFF;

  • [SQL Server] コマンドプロンプトからのCSV形式出力

    SQL ServerのテーブルデータをSELECTしてダブルコーテ区切りのCSVに出力したいと考えております。 ・batファイルからの起動を希望。 ・出力CSVファイル名はbatファイルより引数で指定したい。 ・出力後、DELETEも行いたい。 OracleだとSQL*Plus環境で下記のようにテキストレベルで簡単にできます。 SQL Serverでも同様のことができないでしょうか? 要は下記をSQL Server版でやりたいということです。 参考:Oracleだと・・・ 同一dirに、abc.batとabc.sqlを用意しabc.batを実行すると20070601.csvが生成される。 1.abc.bat rem ----abc.bat-ここから---- sqlplus usr/pwd@host @abc.sql 20070601.csv rem ----abc.bat-ここまで---- 2.abc.sql ----ファイル名=abc.sql-ここから--- set echo off set heading off SET VERIFY OFF set FEEDBACK OFF set TRIMSPOOL on set termout off set pagesize 0 set linesize 32767 spool &1 select '"'|| カラム1 ||'",'|| '"'|| カラム2 ||'",'|| '"'|| カラム3 ||'"' from テーブル1; spool off delete from テーブル1; exit ----ファイル名=abc.sql-ここまで--- 20070601.csv結果 -ファイル名=20070601.csv-ここから--- "20060726","scott","356160" "20060727","tiger","463391" "20060728","manager","1930" -ファイル名=20070601.csv-ここまで--- DBサーバ環境 OS:Win2003SvrR2 SQL Serverバージョン:わかりません。(2003にのってるので最近のだと思われます) Oracle経験者でSQLServer初心者です。マニュアルもなく、Web検索しても「SQL」「Server」ってなかなかうまくひっかからない!! ので質問あげさせていただきます。

  • SQL*Plus:SPOOLコマンドでのSQL出力

    Oracle SQL*Plusで、SPOOLコマンドを使用すると、SQL実行の結果はファイルに出力されますが、実行したSQL自身が出力されません。 SETコマンドで制御できるのではないかと思いましたが、ちょっと見当たりませんでした。 何か方法はないでしょうか? よろしくお願いします。