Oracle 临时表解决ORA-22992问题
通過Database Link集成遠程數據庫時,從遠程數據庫上查詢Blob字段時總返回ORA- 22992 錯誤 。有人采用物化視圖解決這個問題,但物化視圖同步機制會帶來麻煩,如果同步時間設置過短,則占用大量的系統資源,給服務器帶來極大的壓力;如果設置時間過長,前臺用戶不可接受。
參考網上資料,據說來自 AskTom,使用全局臨時表,實現了自認為優雅的解決。?
?
代碼如下:
create or replace package pkg_photo as
? type sys_refcursor is ref cursor;
? procedure proc_photo(p_sfzh in string,
? p_photo OUT pkg_rkzp.sys_refcursor);
? end pkg_photo;
?
? create or replace package body pkg_photo as
?? procedure proc_photo(p_sfzh in string, p_photo OUT pkg_rkzp.sys_refcursor)
????? AS
????? v_num number;
????? v_sql varchar2(2000);
????? v_sfzh string(18);
????? BEGIN???
????????? select count(*) into v_num from user_tables where table_name=upper('tmp_jn_czrk_zp');
????????? dbms_output.PUT_LINE(v_num);
????????? if v_num<1 then
????????????? v_sql := 'create global temporary table tmp_ryzp(sfzh char(18),photo blob) on commit preserve rows';
????????????? EXECUTE IMMEDIATE v_sql;
????????? end if;
?????????
????????? v_sql := 'insert into tmp_photo select sfzh,photo from v_remote_table@mydblink where sfzh=:1';
????????? EXECUTE IMMEDIATE v_sql using p_sfzh;
?????????
????????? OPEN p_photo FOR v_sql;
????????? EXCEPTION
??????????? WHEN NO_DATA_FOUND????????????
????????????? THEN NULL;
??????????? WHEN OTHERS
????????????? THEN RAISE;
????? END proc_photo;
end pkg_photo;
本篇文章來源于 Linux公社網站(www.linuxidc.com)? 原文鏈接:http://www.linuxidc.com/Linux/2011-06/37920.htm
轉載于:https://www.cnblogs.com/Csharpblogs/archive/2011/07/08/2101457.html
總結
以上是生活随笔為你收集整理的Oracle 临时表解决ORA-22992问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数字签名原理剖析
- 下一篇: 关于拖拽上传 [一个拖拽上传修改头像的流