none
SSISを使ってCSVからoracleにインサートする際の文字コードについて RRS feed

  • 質問

  • SSISを使ってフラットファイルソース(CSV)で取り込んだデータを派生列を使って編集し、OLE DB 変換先でoracleにインサートしようとしています。
    しかし、うまくいきません。
    入力側と出力側のデータ型が異なるというエラーメッセージが出てしまいます。

    「OLE DB変換先の詳細エディタ」の入力プロパティと出力プロパティでoralce側のカラムのデータ型を確認したところ、unicodeとなっていました。
    そのため「文字列 [DT_STR]」に直そうと思い、詳細エディタで外部列のカラムのデータ型を変更したのですが、OKを押してエディタを閉じた後、再度開くとカラムのデータ型がunicodeに戻ってしまい直りません。
    同様のエラーも出続けます。
    何かこの現象についてお教えいただけないでしょうか。

    環境:
    oracle11g(NLS_CHARACTERSET:JA16SJIS)
    SQLserver2005
    2009年11月17日 6:52

回答

  • > varchar2とcharですので、「DT_STR」が該当する
    ということは、MSDAORA(Microsoft OLE DB Provider for Oracle)をご利用ということでしょうか。
    (現在の状況の解決ではありませんが、)
    OLE DB プロバイダを OracleClient(OraOLEDB.Oracle / Oracle Provicer for OLE DB)に変更してみるアイデアはいかがでしょうか。
    • 回答としてマーク puffinus 2009年11月18日 6:57
    2009年11月18日 5:19

すべての返信

  • Oracle 側の該当列のデータ型は、
    http://msdn.microsoft.com/ja-jp/library/ms141036.aspx
    の「Integration Services のデータ型とデータベースのデータ型とのマッピング」節にある表では
    どのデータ型に該当しますでしょうか。

    Unicode 文字列 [DT_WSTR] で正しいのであれば、
    派生列コンポーネントにて("新しい列として追加")、[DT_WSTR] にデータ型を変更した列を用意するとよいと思われます。

    • 編集済み nagasakit 2010年1月14日 7:04 誤記訂正
    2009年11月17日 13:10
  • nagasakit様

    ご返答ありがとうございます。
    ご提示いただいたページでデータ型を確認いたしました。
    oracle側のカラムはvarchar2とcharですので、「DT_STR」が該当するようです。


    2009年11月18日 2:31
  • > varchar2とcharですので、「DT_STR」が該当する
    ということは、MSDAORA(Microsoft OLE DB Provider for Oracle)をご利用ということでしょうか。
    (現在の状況の解決ではありませんが、)
    OLE DB プロバイダを OracleClient(OraOLEDB.Oracle / Oracle Provicer for OLE DB)に変更してみるアイデアはいかがでしょうか。
    • 回答としてマーク puffinus 2009年11月18日 6:57
    2009年11月18日 5:19
  • nagasakit様

    ありがとうございます!

    解決いたしました。
    おっしゃられたとおり、OLEプロバイダを変更したらうまくいきました

    うまく取得できていなかったときは
    Oracle Provicer for OLE DB」を利用していましたが、「 Microsoft OLE DB Provider for Oracle」に変更したところ、
    カラムのデータ型が
    DT_STR」で取得できました。
    ありがとうございました。
    2009年11月18日 6:56
  • http://msdn.microsoft.com/ja-jp/library/ms141036.aspx
    の「Integration Services のデータ型とデータベースのデータ型とのマッピング」節にある表、にありますように

    OLE DB プロバイダを MSDAORA(Microsoft OLE DB Provider for Oracle)の場合
    varchar2 とchar は DT_STR として扱われることが正しく、

    OLE DB プロバイダが OracleClient(OraOLEDB.Oracle / Oracle Provicer for OLE DB)の場合
    varchar2 とchar は DT_WSTR として扱われることが正しい、

    と考えられます。

    OLE DB プロバイダはどちらでも構いませんが、正しいSSISデータ型に変換しておく必要がございます。
    2009年11月18日 7:58