国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > Oracle > 正文

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

2020-07-26 14:14:44
字體:
來源:轉載
供稿:網友

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

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

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

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

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

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

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 行出現錯誤:

ORA-06502: PL/SQL: 數字或值錯誤 :  字符串緩沖區太小
ORA-06512: 在 line 5

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

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 行出現錯誤:

ORA-06502: PL/SQL: 數字或值錯誤 :  字符串緩沖區太小
ORA-06512: 在 line 5

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

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

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

運行結果:v_cnt: 14

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

         2.ORACLE 的大數據類型還須研究。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 来宾市| 灵宝市| 隆化县| 聊城市| 新乡县| 武穴市| 黄骅市| 唐山市| 南平市| 巴彦淖尔市| 阜新市| 黎城县| 民和| 塘沽区| 托克逊县| 文昌市| 临安市| 聂荣县| 西宁市| 宁化县| 古丈县| 陕西省| 平陆县| 乌拉特中旗| 清河县| 镇坪县| 庆城县| 开鲁县| 宕昌县| 仙桃市| 福建省| 玉屏| 乌兰县| 五大连池市| 绥宁县| 灵寿县| 抚州市| 馆陶县| 高唐县| 义乌市| 建湖县|