2016-11-18 16 views
0

clob列の画像のbase64文字列をsql servervarchar(max)タイプの列に格納します。 oracleデータベースのdbリンクを使用してsql serverdatabaseにアクセスしています。oracle plsqlのdbリンクを使用してvarchar(max)にclobを挿入する

ここに私が使用しているコードがあります。

declare 
    c clob; 
begin 
    select base64_clob into c from base64clobtable; 
    insert into [email protected] values(null, null, null,c); 
    commit; 
end; 

この文を実行すると、このエラーが発生します。

ORA-06550: line 5, column 71: 
PL/SQL: ORA-22992: cannot use LOB locators selected from remote tables 
ORA-06550: line 5, column 5: 
PL/SQL: SQL Statement ignored 

は親切に私は、DBリンクを使用してvarchar(max)clob列を挿入することができますどのようにあなたの考えを共有しています。

+0

リモート表のLOBへの参照はできません。代わりに、リモート表を参照するためのマテリアライズド・ビューを作成できます。または、一時テーブルを作成します。 – JSapkota

+0

MR @JSapkotaに返信いただきありがとうございます。あなたはあなたが上記のことについてより具体的になることができますか? Base64clobtableは私のOracleデータベースにあります。 –

答えて

0

状態は何ですか:あなたは、ロケータを指し示すロブロケータを持っています。あなたはこのようにしてDBリンク上でロブで遊ぶことはできません。

私はgloabl一時テーブルを使用することをお勧めします。

1)GTTのデータをoracle dbにロードします。
2)EMPTRANS_ACTIVE_TEST @ attlogdbに挿入します。select * from gtt;

SQL> create global temporary table foo as select base64_clob from base64clobtable; 

SQL> insert into [email protected] select null, null, null, clob_data from foo; 
SQL> commit; 
+1

答えに説明を追加できますか? –

+0

巨大なデータを保持するためにclobが使用されています。その場合、問題が発生する可能性があります。私はちょうどあなたがclobのsubstrを行うと、SQL Serverのvarcharデータ型の最大限であると思う文字の数を取得することをお勧めしています。あなたの問題を解決する可能性があります。 SQLサーバ –

+0

のvarcharのサイズ制限を "max_limit for sql_server"に置き換える必要があります。その説明をコメントには含めず、代わりに**あなたの答えを編集**してください。 –

0

あなたの問題は、リモートのCLOB

1を取得するには、2つのソリューションを持っているリモートDBからCLOBの選択である)DBMS_LOB.SUBSTRを選択し、リモートサイト上のビューを作成します。 dblink上でそのビューから選択することができます(MAX 4000文字)

2)ローカル一時テーブルに挿入し、ロブをコピーして作業してください。

+0

問題はリモートdbにclobを挿入することです。 –

+0

を選択しないでください。別のサイトからの回答をコピーして貼り付ける場合は、この回答にリンクを追加してhttps://asktom.oracleを追加してください。あなたが@ArkadiuszのEMPTRANS_ACTIVE_TEST @ attlogdbを更新していただきありがとうございます。clob_column = clob_column || rec.c_chunk where remote_id = v_remote_id; com/pls/asktom/f?p = 100:11:0 ::: P11_QUESTION_ID:950029833940 – miracle173

0

これを試してください。しかし、私のソリューションがうまくいくかどうかはわかりません。 SQL Serverのvarchar(max)がわかっているのは、oracle clobデータ型と同等です。 clobをvarchar2チャンクにローカル分割し、リモートレコードをループで更新します。

declare 
    c clob; 
    l_chunk_cnt number; 
    v_chunk_size number := 4000; 
    v_remote_id number; 
begin 
    select base64_clob into c from base64clobtable; 
    insert into [email protected] values(null, null, null,'') returning remote_id into v_remote_id; 
    l_chunk_cnt := ceil(bms_lob.getlength(c)/v_chunk_size); 
    for rec in (select dbms_lob.substr(c, v_chunk_size, ((level-1) * v_chunk_size) + 1) c_chunk 
      ,level 
    from dual 
    connect by level <= l_chunk_cnt) loop 
     update [email protected] set clob_column = clob_column||rec.c_chunk where remote_id = v_remote_id; 
    end loop; 

end; 
+0

エラーが発生します。 ORA-00932:一貫性のないデータ型:期待されるCHARが長引いています –

関連する問題