ITPub博客

首页 > 数据库 > Oracle > [20221123]19cDBA_EXPRESSION_STATISTICS查询expression_text中字符串带双引号的问题

[20221123]19cDBA_EXPRESSION_STATISTICS查询expression_text中字符串带双引号的问题

原创 Oracle 作者:lfree 时间:2022-11-23 10:56:54 0 删除 编辑

[20221123]19cDBA_EXPRESSION_STATISTICS查询expression_text中字符串带双引号的问题.txt

--//今天遇到一个小问题,就是查询DBA_EXPRESSION_STATISTICS视图 expression_text中字符串带双引号的问题.无法使用等于方式查询,
--//而实际上的情况是字符串结尾包含\0,通过例子说明问题:

1.环境:
SYS@192.168.100.235:1521/orcl> @ pr
==============================
PORT_STRING                   : x86_64/Linux 2.4.xx
VERSION                       : 19.0.0.0.0
BANNER                        : Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
BANNER_FULL                   : Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0
BANNER_LEGACY                 : Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
CON_ID                        : 0
PL/SQL procedure successfully completed.

2.测试:
SYS@192.168.100.235:1521/orcl> SELECT *
  FROM SYS.DBA_EXPRESSION_STATISTICS
 WHERE last_modified   >= trunc(sysdate)
   AND table_name      =  'LIS_TEST'
   AND expression_text =  '"TEST_NO"';
no rows selected

SYS@192.168.100.235:1521/orcl>  SELECT *
  FROM SYS.DBA_EXPRESSION_STATISTICS
 WHERE last_modified >= trunc(sysdate)
   AND table_name    =  'LIS_TEST'
   AND expression_text like '%TEST_NO%'
   AND rownum        =  1
  2  @ pr
==============================
OWNER                         : LIS
TABLE_NAME                    : LIS_TEST
EXPRESSION_ID                 : 3602778108646932730
SNAPSHOT                      : LATEST
EVALUATION_COUNT              : 13136741
FIXED_COST                    : .0000000268215720022949
DYNAMIC_COST                  :
EXPRESSION_TEXT               : "TEST_NO"
CREATED                       : 2020-11-27 17:18:02
LAST_MODIFIED                 : 2022-11-23 10:38:37
PL/SQL procedure successfully completed.

SYS@192.168.100.235:1521/orcl> select expression_text,dump(expression_text) from SYS.DBA_EXPRESSION_STATISTICS where last_modified >=trunc(sysdate)and table_name='LIS_TEST' and expression_text  like  '%TEST_NO%' and rownum=1
  2  @ pr
==============================
EXPRESSION_TEXT               : "TEST_NO"
DUMP(EXPRESSION_TEXT)         : Typ=1 Len=10: 34,84,69,83,84,95,78,79,34,0
PL/SQL procedure successfully completed.
--//注意看实际上结尾存在\0字符.改写如下就ok了.

SYS@192.168.100.235:1521/orcl> select * from SYS.DBA_EXPRESSION_STATISTICS where last_modified >=trunc(sysdate)and table_name='LIS_TEST' and expression_text  = '"TEST_NO"'||chr(0)
  2  @ pr
==============================
OWNER                         : LIS
TABLE_NAME                    : LIS_TEST
EXPRESSION_ID                 : 3602778108646932730
SNAPSHOT                      : LATEST
EVALUATION_COUNT              : 13136741
FIXED_COST                    : .0000000268215720022949
DYNAMIC_COST                  :
EXPRESSION_TEXT               : "TEST_NO"
CREATED                       : 2020-11-27 17:18:02
LAST_MODIFIED                 : 2022-11-23 10:38:37
==============================
OWNER                         : LIS
TABLE_NAME                    : LIS_TEST
EXPRESSION_ID                 : 3602778108646932730
SNAPSHOT                      : CUMULATIVE
EVALUATION_COUNT              : 25595018601
FIXED_COST                    : .0000000268215720022949
DYNAMIC_COST                  :
EXPRESSION_TEXT               : "TEST_NO"
CREATED                       : 2020-11-27 17:18:02
LAST_MODIFIED                 : 2022-11-23 10:38:37
PL/SQL procedure successfully completed.



来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/267265/viewspace-2924692/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
熟悉oracle相关技术,擅长sql优化,rman备份与恢复,熟悉linux shell编程。

注册时间:2008-01-03

  • 博文量
    4006
  • 访问量
    7969886