Dict.CN 在線詞典, 英語學習, 在線翻譯

          都市淘沙者

          荔枝FM Everyone can be host

          統計

          留言簿(23)

          積分與排名

          優秀學習網站

          友情連接

          閱讀排行榜

          評論排行榜

          處理CLOB字段的動態PL/SQL (zhuan)

          動態PL/SQL,對CLOB字段操作可傳遞表名table_name,表的唯一標志字段名field_id,clob字段名field_name,記錄號v_id,開始處理字符的位置v_pos,傳入的字符串變量v_clob

          修改CLOB的PL
          /SQL過程:updateclob

          create or replace procedure updateclob(
               table_name     
          in varchar2,
               field_id        
          in varchar2
               field_name     
          in varchar2,
               v_id           
          in number,
               v_pos          
          in number,
               v_clob         
          in varchar2)
          is
               lobloc     clob;
               c_clob     
          varchar2(32767);
               amt         binary_integer;
               pos         binary_integer;
               query_str     
          varchar2(1000);
          begin
             pos:
          =v_pos*32766+1;
             amt :
          = length(v_clob);
             c_clob:
          =v_clob;
             query_str :
          ='select '||field_name||' from '||table_name||' where '||field_id||'= :id for update ';
          --initialize buffer with data to be inserted or updated
             EXECUTE IMMEDIATE query_str INTO lobloc USING v_id;
          --from pos position, write 32766 varchar2 into lobloc
             dbms_lob.write(lobloc, amt, pos, c_clob);
             
          commit;
          exception
             
          when others then
             
          rollback;
          end;
          /


          用法說明:
          在插入或修改以前,先把其它字段插入或修改,CLOB字段設置為空empty_clob(),
          然后調用以上的過程插入大于2048到32766個字符。
          如果需要插入大于32767個字符,編一個循環即可解決問題。

          查詢CLOB的PL
          /SQL函數:getclob


          create or replace function getclob(
               table_name     
          in varchar2,
               field_id        
          in varchar2
               field_name     
          in varchar2,
               v_id     
          in number,
               v_pos     
          in numberreturn varchar2
          is
               lobloc     clob;
               buffer     
          varchar2(32767);
               amount     
          number := 2000;
               offset     
          number := 1;
               query_str     
          varchar2(1000);
          begin
             query_str :
          ='select '||field_name||' from '||table_name||' where '||field_id||'= :id ';
          --initialize buffer with data to be found
             EXECUTE IMMEDIATE query_str INTO lobloc USING v_id;
             offset:
          =offset+(v_pos-1)*2000
          --read 2000 varchar2 from the buffer
             dbms_lob.read(lobloc,amount,offset,buffer);
                 
          return buffer;
          exception
              
          when no_data_found then
                 
          return buffer;
          end;
          /

          用法說明:

          用select getclob(table_name,field_id,field_name,v_id,v_pos) 
          as partstr from dual;
          可以從CLOB字段中取2000個字符到partstr中,
          編一個循環可以把partstr組合成dbms_lob.getlength(field_name)長度的目標字符串。

          調用PL
          /SQL過程的方法:
              SQL
          *PLUS        SQL> EXEC 過程名[(參數)];
              
          Procedure Builder    PL/SQL>過程名[(參數)];     
              JAVA        CALL { 過程名
          [(參數)] };
              PHP        
          BEGIN { 過程名[(參數)] } END;

          posted on 2008-04-11 11:40 都市淘沙者 閱讀(899) 評論(0)  編輯  收藏 所屬分類: Oracle/Mysql/Postgres/

          主站蜘蛛池模板: 阜城县| 康马县| 张北县| 本溪市| 广南县| 呼图壁县| 夏邑县| 宜兰县| 邛崃市| 武邑县| 哈尔滨市| 罗平县| 乌鲁木齐县| 大关县| 商南县| 呈贡县| 宜君县| 文昌市| 乐安县| 东海县| 疏附县| 峨眉山市| 焦作市| 赞皇县| 日土县| 浦江县| 攀枝花市| 嫩江县| 隆子县| 桐乡市| 万州区| 广西| 四平市| 巴塘县| 虎林市| 晋江市| 阳山县| 巧家县| 共和县| 达拉特旗| 沂南县|