婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識(shí)庫 > ORACLE 超長字符串問題的解決辦法

ORACLE 超長字符串問題的解決辦法

熱門標(biāo)簽:山東crm外呼系統(tǒng)軟件 百度地圖標(biāo)注途經(jīng)點(diǎn) 地圖標(biāo)注養(yǎng)老院 愛客外呼系統(tǒng)怎么樣 圖吧網(wǎng)站地圖標(biāo)注 哈爾濱電話機(jī)器人銷售招聘 開發(fā)外呼系統(tǒng) 慧營銷crm外呼系統(tǒng)丹丹 哪個(gè)400外呼系統(tǒng)好

前兩天我在工作中遇到這樣一個(gè)問題,我們有一個(gè)程序是用來增量抽取EBS 中的表數(shù)據(jù)的,有的是全量抽取,即先刪除原表中的數(shù)據(jù),然后重新抽取數(shù)據(jù),示例代碼如下:

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

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

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

      我可不想加班,趕緊把語句由INSERT寫成MERGE。寫完一運(yùn)行,報(bào)錯(cuò):

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

SQL> DECLARE
  v_str VARCHAR();
  v_cnt NUMBER;
 BEGIN
  v_str := RPAD('select count(*) from emp',);
  EXECUTE IMMEDIATE v_str INTO v_cnt;
  dbms_output.put_line('v_cnt: '||v_cnt);
 END;
 /
DECLARE
*

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

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

我想這還不好辦嘛,直接把varchar2改成long。可是還是報(bào)錯(cuò)了:

SQL> DECLARE
  v_str LONG;
  v_cnt NUMBER;
 BEGIN
  v_str := RPAD('select count(*) from emp',);
  EXECUTE IMMEDIATE v_str INTO v_cnt;
  dbms_output.put_line('v_cnt: '||v_cnt);
 END;
 /
DECLARE
*

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

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

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

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

DECLARE 
 v_str CLOB;
 v_temp_str VARCHAR();
 v_cnt NUMBER;
 BEGIN
 dbms_lob.createtemporary(v_str,true);--創(chuàng)建一個(gè)臨時(shí)lob
 v_temp_str := RPAD('select count(*) ',);
 dbms_lob.append(v_str,v_temp_str);--把臨時(shí)字符串付給v_str
 v_temp_str := RPAD('from emp ',);
 dbms_lob.append(v_str,v_temp_str);--把臨時(shí)字符串付給v_str
 EXECUTE IMMEDIATE v_str INTO v_cnt;
 dbms_output.put_line('v_cnt: '||v_cnt);
 dbms_lob.freetemporary(v_str);--釋放lob
 END;

運(yùn)行結(jié)果:v_cnt: 14

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

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

您可能感興趣的文章:
  • Oracle 隨機(jī)數(shù)
  • Oracle中字符串截取常用方法總結(jié)【推薦】
  • Oracle截取字符串去掉字段末尾指定長度的字符
  • oracle使用instr或like方法判斷是否包含字符串
  • 深入分析C#連接Oracle數(shù)據(jù)庫的連接字符串詳解
  • Oracle中字符串連接的實(shí)現(xiàn)方法
  • Oracle生成隨機(jī)數(shù)字、字符串、日期、驗(yàn)證碼及 UUID的方法

標(biāo)簽:甘肅 和田 武漢 開封 承德 青島 周口 固原

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《ORACLE 超長字符串問題的解決辦法》,本文關(guān)鍵詞  ORACLE,超長,字符串,問,題的,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《ORACLE 超長字符串問題的解決辦法》相關(guān)的同類信息!
  • 本頁收集關(guān)于ORACLE 超長字符串問題的解決辦法的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    主站蜘蛛池模板: 溆浦县| 浦县| 鄂温| 辽阳市| 巴林右旗| 旅游| 秀山| 泰安市| 永仁县| 佳木斯市| 宝坻区| 盈江县| 仁寿县| 抚远县| 静乐县| 息烽县| 怀来县| 福鼎市| 独山县| 博乐市| 南汇区| 丹阳市| 休宁县| 如东县| 庆安县| 板桥市| 金湖县| 花莲市| 通海县| 江孜县| 海淀区| 毕节市| 双桥区| 耿马| 清新县| 巧家县| 玛多县| 昌吉市| 温州市| 梨树县| 东港市|