SQL*Loaderで固定長データをロードする方法とは?

このQ&Aのポイント
  • SQL*Loaderを使用して、指定した項目を含む固定長データをデータベースにロードする方法について教えてください。
  • SQL*Loaderを使用して固定長データをロードする際に、一部の項目のみを指定してロードする方法について説明してください。
  • 指定した項目で固定長データをロードする際に、残りの項目が次のレコードとして認識されてしまう場合、最後の指定項目でレコードを切る方法はあるのでしょうか?
回答を見る
  • ベストアンサー

【SQL*Loader】固定長データのロードについて

SQL*Loaderで固定長データを項目を指定してDBへロードしたいのですが・・・ 10件の項目があって例えば、 「A,B,C,D,E,F,G,H,I,J」とします。(全部6ビットでCHAR型とします。) このうち、「A,B,C,F,G,H」を指定してロードしたいとき、 おそらく「POSION」を使って制御ファイルを作成すると思います。 実際制御ファイルを作ってロードを試みたところ、 確かにDやEをすっ飛ばして、ロードできたました。 ところが、指定しなかった項目で残りの最後の項目であるIやJが 次のレコードとして認識されてしまうのです。 つまり、「A,B,C,F,G,H」を最初のレコードとして認識し、 続いて「I,J」をレコードとして認識しているのだと思います。 たぶん、IやJも指定してロードするとうまくいく気がします・・ でもI,Jはロードしたくない項目なのです・・・ このI,Jの前、つまり指定項目の最後のHでレコードを切って ここで一つのレコードとして終わらせるようにするような方法がないか 探しております。 どなたかご教示いただければと思います。 よろしくお願いします。

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

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

  • ベストアンサー
  • sshiba
  • ベストアンサー率69% (73/105)
回答No.1

「後ろに余計なデータが付いている固定長レコードを読み込みたい」ということかと 思うのですが、それであれば制御ファイルのINFILE文にRECSIZEパラメータを指定すれば いいと思います。  INFILE '読み込むファイル名' "RECSIZE xxx" で'xxx'のところにバイト数を指定するのですが、そこのバイト数として 「A~Hフィールド間のバイト数」 を指定することになります。 要は、レコードサイズの指定でI, Jフィールドを落としてしまう…という考え方です。 あるいは、「とりあえずSQL*Loaderのレベルでは全部取り込むだけ取り込んでおいて、 取り込んだテーブルから必要なフィールドだけselect文で選択し、他のテーブルに コピーして使う」というやり方もありますが、これは「いくら何でも頭が悪い」と 言われるかも知れません(苦笑)

Rook09
質問者

お礼

お礼のご返事が遅れてすみません。ご回答ありがとうございます。 参考にさせていただきます。 RECSIZEという機能があるのは知りませんでした。 これでしたら出来そうです。ありがとうございます。助かります!

関連するQ&A

  • ツリー情報のデータをSQLで取得したい

    SQLServer 2008 です。 以下のツリーデータの場合に A ┬C │├D ┬H ││ ├I ││ └J │└E B ┬F ┬I  │ └L  └G 次のようなデータを登録しています。 ┌──┬──┬──┐ │OYA │KO │Data│ ├──┼──┼──┤ │A │C  │"C" │ ├──┼──┼──┤ │A  │D  │"D" │ ├──┼──┼──┤ │A  │E  │"E" │ ├──┼──┼──┤ │B  │F  │"F" │ ├──┼──┼──┤ │B  │G  │"G" │ ├──┼──┼──┤ │D  │H  │"H" │ ├──┼──┼──┤ │D  │I  │"I" │ ├──┼──┼──┤ │D  │J  │"J" │ ├──┼──┼──┤ │F  │I  │"I" │ ├──┼──┼──┤ │F  │L  │"L" │ └──┴──┴──┘ 引数OYA="A"でSQLを実行した場合に 以下のような この引数を含むそれ以下のツリーに関する データを取得する方法を教えてください。 ┌──┬──┬──┐ │OYA │KO │Data│ ├──┼──┼──┤ │A │C  │"C" │ ├──┼──┼──┤ │A  │D  │"D" │ ├──┼──┼──┤ │A  │E  │"E" │ ├──┼──┼──┤ │D  │H  │"H" │ ├──┼──┼──┤ │D  │I  │"I" │ ├──┼──┼──┤ │D  │J  │"J" │ └──┴──┴──┘

  • excel 関数作成の簡素化 ?

    A B C D E F G H I J 1784 1784 1781 1782 1809 1813 1821 1813 1784 1784 (1)A-B B-C C-D D-E E-F F-G G-H H-I I-J (1)0 3 -1 -27 -4 -8 8 29 0 (2)=SUMIF(A:I,">0",A:I) で 40になる 上記の(1)を使用せず (2)のように一気に出来ないか? もしも 表示が悪ければ 書き直し する為 回答不要

  • エクセルデータの並び替え

    A列に 1 2 3 4 5 6 7 ・・・・・ B列に a b c d e f g h i j k l ・・・・ と文字列があります。 これを C列に 5つずつデータをセットにして並べたいのです。 A列    B列           C列 1     a      1 a   2 b  3 c  4 d  5 e 2     b      6 f   7 g  8 h  9 i  10 j 3     c      11 k  12 l  13 m  14 n  15 o 4     d      16 p   17 q  18 r  19 s  20 t 5     e      以下同じように続く 6     f 7     g 8     h 9     i 10     j 11     k 実際のC列のデータは トマト tomato  ネコ cat   机 desk  いす chair  かばん  bag  のようにしたいのです。 関数の扱いがわからずに苦戦しています。どうぞ、よろしくお願いします。

  • SQL*Loaderについて2

    以前質問した内容と似ているのですが、 ロード元のCSV内に小数点2位までの数字が入った項目あるのですが これをNUMBER(10)のテーブルにロードするとエラーが出ます。 なので制御ファイル内のロード先列指定部分で 金額 "trunc(:金額,0)" で小数点を切り捨てようとしたところ数値が無効エラーがでます。 うまいこと小数点を省いてロードするためにはどうしたらいいですか?

  • データを比較したいのですがよい方法がありますでしょうか?

    データを比較したいのですがよい方法がありますでしょうか? DF(フリーソフト)でしてはみたのですがどうもうまくいきません。 エクセルもしくはエディタのマクロ等でできますでしょうか。 下記はサンプルです。実際のデータは5,000件ほどあり、項目もたくさんあります。 差異を見るだけでなく、該当レコードを出力したいのですが。 (昨年) 101,A,B,C,D,E 102,A,B,C,D,F 103,A,B,C,G,E 104,A,H,C,D,E 105,I,B,C,D,E 106,I,B,J,D,E 107,A,K,C,D,E 108,A,B,C,L,E 109,A,B,C,D,M 110,N,B,C,D,E (今年) 101,A,B,C,D,E 102,A,B,C,P,F 103,A,B,C,G,E 104,Q,H,C,D,E 105,I,B,C,D,E 107,A,K,R,D,E 108,A,S,C,L,E 109,A,B,C,D,M 110,N,B,C,D,T 111,U,B,C,D,E ●結果 同じ 101,A,B,C,D,E 103,A,B,C,G,E 105,I,B,C,D,E 109,A,B,C,D,M 昨年にあって今年にないデータ 106,I,B,J,D,E 今年にあって昨年にないデータ 111,U,B,C,D,E 相違データ 102,A,B,C,P,F 104,Q,H,C,D,E 107,A,K,R,D,E 108,A,S,C,L,E 110,N,B,C,D,T

  • SQLがわかりません。

    以下のTESTテーブルから以下の結果を表示するようなSQLを教えて頂けないでしょうか。 TESTテーブルでTYPE(1,2,3)を抽出して、2,1,3の順番にして それぞれのTYPEごとにDBIDでソートをしたいです。 どうかよろしくお願いいたします。 table TEST DBID | NAME | TYPE ------------------------------- 1 | A | 1 2 | B | 2 3 | C | 3 4 | D | 4 5 | E | 1 6 | F | 2 7 | G | 3 8 | H | 4 9 | I | 1 10 | J | 2 結果 DBID | NAME | TYPE ------------------------------- 2 | B | 2 6 | F | 2 10 | H | 2 1 | A | 1 5 | D | 1 9 | G | 1 3 | D | 3 7 | G | 3

  • エクセルで2列以上のものを同時に並び替えするには

    エクセルで下記のようなデーターがあるとします。 1 A  G     B  H 2 C  I  ○   D  J 3 E  K   F  L このようにひとつの項目に2行づつあるものに対して、最後に○をつけたものを先頭に2行そのまま一気に並び替えるにはどのようにすればよろしいでしょうか?要するに 2 C  I  ○   D  J 1 A  G     B  H 3 E  K   F  L このようにしたいです。 よろしくお願いいたします。

  • VBA

    1 a;b;c;d; 2 e;f;g;h; 3 i;j;k;l; をVBAで   1 a;   2 e;   3 i;   1 b;   2 f;    3 j;   1 c;   2 g;   3 k;   1 d;   2 h;   3 l; としたいのですが、どうしたらいいですか?

  • PL/SQLの質問

    PL/SQLの質問 お世話になっております。 下記の様なテーブル「試験項目マスタ」と「クラスマスタ」が二つ有り、 オラクルのPL/SQL(ストアドプロシージャ)で、 「試験項目マスタ」の登録IDと「クラスマスタ」の登録IDが同じ場合、 2A列以降に丸印を付けていきたいのですが(説明が難しく、省略してい ますが、つまり下記の「結果」様にしたいのです。)、 どの様な記述をすれば良いのか分からず困っています。 どなたかご親切な方、ご教授頂きたく宜しくお願い致します。       記 「試験項目マスタ」 登録ID 大項目 中項目 小項目 2A  2B  2C  2D  2E  2F  2G  2H  2I  2J 2L 0001 学科試験 国語   古文 0002 学科試験 数学I 0003 学科試験 数学 0004 学科試験 化学 0005 学科試験 世界史 0006 学科試験 日本史 0007 学科試験 英語   英会話 0008 学科試験 体育   サッカー 0009 学科試験 音楽   合唱 0010 学科試験 技術 「クラスマスタ」 登録ID クラス 0001 2A 0001 2C 0001 2D 0001 2F 0001 2H 0001 2J 0002 2B 0002 2E 0002 2G 0002 2I 0002 2L  ・   ・  ・   ・  ・   ・  ↓ 結果 登録ID  大項目 中項目 小項目 2A  2B  2C  2D  2E  2F  2G  2H  2I  2J 0001  学科試験 国語   古文  ○      ○   ○      ○      ○     ○ 0002  学科試験 数学I            ○         ○       ○      ○ 0003  学科試験 数学 ・    ・    ・ ・    ・    ・ ・    ・    ・ ・    ・    ・

  • リストのデータを重複なしでランダムに抽出する

    シート1に下記のように14種類の名前リストがあります     A 1   A 2   B 3   C 4   D 5   E 6   F 7   G 8   H 9   I 10  J  11  K 12  L 13  M 14  N 上記の名前を下記のように別シートの数列おきの列(行は同一)に重複なしに行毎にランダムに抽出する事が関数で出来るでしょうか?(エクセルは2010です) ちなみに下記は一列おきのセルに抽出した例です   A B C D E F G H I J K L M N O P Q R S T U V W X Y Z AA 1 D   L   K    I    A   M   N    B   H   J    C    F    E   G 2 K   J   M   H    I   G   F    E   D    A    B   N   C    L 3 E   J   A    L   B   M    K   C   N    G    F   D    H   I どなたか教えていただける方がおりましたらよろしくお願いします。