HelloDBA [English]
搜索Internet 搜索 HelloDBABA
  Oracle技术站。email: fuyuncat@gmail.com  MSN: fuyuncat@hotmail.com   acoug  acoug 

12.1.0.2Bug --- SQL长度大于131072时v$sql视图中SQL_FULLTEXT存储的数据变混乱

[English]

作者: fuyuncat

来源: www.HelloDBA.com

日期: 2017-06-26 11:39:05

分享到  新浪微博 腾讯微博 人人网 i贴吧 开心网 豆瓣 淘宝 推特 Facebook GMail Blogger Orkut Google Bookmarks

 SQL长度大于131072时v$sql视图中SQL_FULLTEXT存储的数据变混乱。

实例代码如下

SQL代码
  1. HelloDBA.COM> set serveroutput on  
  2. declare  
  3.   sql_r clob;  
  4.   sql_t clob;  
  5.   sql_c clob;  
  6.   end loop;  
  7.   sql_t := sql_r||lpad(' ',11005);  
  8. begin  
  9.   sql_r := '/*astav*/with a as (select 1 c from dual) select * from a order by 1';  
  10.   end if;  
  11.   for i in 1..4 loop  
  12.     sql_r := sql_r||lpad(' ',30000);  
  13.   end loop;  
  14.   sql_t := sql_r||lpad(' ',11005);  
  15.   execute immediate sql_t;  
  16.   select sql_fulltext into sql_c from v$sqlarea where sql_text like '/*astav*/%';  
  17.   if sql_c != sql_t then  
  18.     dbms_output.put_line('Yes');  
  19.     dbms_output.put_line(' ');  
  20.     return;  
  21.   end if;  
  22. end;  
  23.  19  /  
  24. Yes  
  25.   
  26. PL/SQL procedure successfully completed.  
  27.   
  28. HelloDBA.COM> set serveroutput on  
  29. HelloDBA.COM> declare  
  30.   sql_r clob;  
  31.   sql_t clob;  
  32.   sql_c clob;  
  33. begin  
  34.   sql_r := '/*asta*/with a as (select 1 c from dual) select * from a order by 1';  
  35.   for i in 1..4 loop  
  36.     sql_r := sql_r||lpad(' ',30000);  
  37.   9    end loop;  
  38.   sql_t := sql_r||lpad(' ',11005);  
  39.   execute immediate sql_t;  
  40.   select sql_fulltext into sql_c from v$sqlarea where sql_text like '/*asta*/%';  
  41.   if sql_c != sql_t then  
  42.     dbms_output.put_line('Yes');  
  43.     dbms_output.put_line(' ');  
  44.   end if;  
  45.     return;  
  46.   end if;  
  47. end;  
  48.  19  /  
  49.   
  50. PL/SQL procedure successfully completed.  
  51.   
  52. HelloDBA.COM> set pagesize 50000 lines 2000 long 10000000 longchunksize 10000000  
  53.   
  54. HelloDBA.COM> select sql_fulltext, dbms_lob.getlength(sql_fulltext) from v$sqlarea where sql_text like '/*asta*/%';  
  55. DBMS_LOB.GETLENGTH(SQL_FULLTEXT)  
  56. --------------------------------  
  57. /*astav*/with a as (select 1 c from dual) select * from a order by 1  
  58. ...  
  59. 131072  
  60.   
  61. HelloDBA.COM> select sql_fulltext, dbms_lob.getlength(sql_fulltext) from v$sqlarea where sql_text like '/*astav*/%';  
  62. DBMS_LOB.GETLENGTH(SQL_FULLTEXT)  
  63. --------------------------------  
  64. /*astav*/with a as (select 1 c from dual) select * from a order by 1  
  65. ...                                           /  
  66. 131073  

从第131073个字符开始,重复原SQL语句

Top

Copyright ©2005,HelloDBA.Com 保留一切权利

申明
by fuyuncat