日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
ORACLE超長字符串問題的解決辦法

       這篇文章主要介紹了ORACLE 超長字符串問題的解決辦法,需要的朋友可以參考下前兩天我在工作中遇到這樣一個問題,我們有一個程序是用來增量抽取EBS 中的表數(shù)據(jù)的,有的是全量抽取,即先刪除原表中的數(shù)據(jù),然后重新抽取數(shù)據(jù),示例代碼如下:

成都創(chuàng)新互聯(lián)是專業(yè)的金州網(wǎng)站建設(shè)公司,金州接單;提供成都網(wǎng)站設(shè)計、做網(wǎng)站,網(wǎng)頁設(shè)計,網(wǎng)站設(shè)計,建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行金州網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團(tuán)隊,希望更多企業(yè)前來合作!

 
 
  1. truncate table ods_emp drop storage; 
  2.  insert into ods_emp select * from emp; 

 

  另外一種方式是增量抽取,用的是merge語句,這里就不寫了;)

  接觸過EBS庫存模塊的同志們知道,INV中的物料表是MTL_SYSTEM_ITEM_B,這個表的字段那叫一個多!我之前搞錯了,用的是***種方案提取的,這就會導(dǎo)致我的程序運行之后數(shù)據(jù)會大量減少(原因是臨時表只有一兩天的數(shù)據(jù),大家懂得)。恰好這問題是在調(diào)試程序時出現(xiàn)的,并且不只是我負(fù)責(zé)的INV出現(xiàn)了問題,其他同事的模塊也有。于是項目經(jīng)理怒了,發(fā)話:今天誰搞不完,加班!

  我可不想加班,趕緊把語句由INSERT寫成MERGE。寫完一運行,報錯:

  哦,原來是字符超長了。在這里我就不把之前的程序?qū)戇@里了,以免嚇到大家。我用下面的代碼來模擬這個錯誤吧:

 
 
  1. SQL> DECLARE 
  2.   v_str VARCHAR(); 
  3.   v_cnt NUMBER; 
  4.  BEGIN 
  5.   v_str := RPAD('select count(*) from emp',); 
  6.   EXECUTE IMMEDIATE v_str INTO v_cnt; 
  7.   dbms_output.put_line('v_cnt: '||v_cnt); 
  8.  END; 
  9.  / 
  10. DECLARE 

 

  第 1 行出現(xiàn)錯誤:

  ORA-06502: PL/SQL: 數(shù)字或值錯誤 : 字符串緩沖區(qū)太小

  ORA-06512: 在 line 5

  我想這還不好辦嘛,直接把varchar2改成long。可是還是報錯了:

 
 
  1. SQL> DECLARE 
  2.   v_str LONG; 
  3.   v_cnt NUMBER; 
  4.  BEGIN 
  5.   v_str := RPAD('select count(*) from emp',); 
  6.   EXECUTE IMMEDIATE v_str INTO v_cnt; 
  7.   dbms_output.put_line('v_cnt: '||v_cnt); 
  8.  END; 
  9.  / 
  10. DECLARE 

  第 1 行出現(xiàn)錯誤:

  ORA-06502: PL/SQL: 數(shù)字或值錯誤 : 字符串緩沖區(qū)太小

  ORA-06512: 在 line 5

  我之前在網(wǎng)上查的是LONG類型支持2G的大小,不知為啥,這次報錯了。平時由于工作的限制,很少接觸像LONG,LOB,CLOB等大數(shù)據(jù)類型,以后可得仔細(xì)研究下了。

  自己當(dāng)時有點兒著急了,也想不出合適的辦法來,只能請教同事了。還真有一個同事遇到過,她把字符串變量定義成CLOB類型,具體請看代碼:

 
 
  1. DECLARE 
  2.  v_str CLOB; 
  3.  v_temp_str VARCHAR(); 
  4.  v_cnt NUMBER; 
  5.  BEGIN 
  6.  dbms_lob.createtemporary(v_str,true);--創(chuàng)建一個臨時lob 
  7.  v_temp_str := RPAD('select count(*) ',); 
  8.  dbms_lob.append(v_str,v_temp_str);--把臨時字符串付給v_str 
  9.  v_temp_str := RPAD('from emp ',); 
  10.  dbms_lob.append(v_str,v_temp_str);--把臨時字符串付給v_str 
  11.  EXECUTE IMMEDIATE v_str INTO v_cnt; 
  12.  dbms_output.put_line('v_cnt: '||v_cnt); 
  13.  dbms_lob.freetemporary(v_str);--釋放lob 
  14.  END; 

 

  運行結(jié)果:v_cnt: 14

  總結(jié):1.用CLOB類型可以處理字符串超長的情況;

  2.ORACLE 的大數(shù)據(jù)類型還須研究。


當(dāng)前文章:ORACLE超長字符串問題的解決辦法
網(wǎng)址分享:http://m.5511xx.com/article/coipope.html