监控或者排查SQL性能问题的时候,可能会抓到一条带绑定变量的语句,此时往往会根据对应绑定变量的值,做更深入的分析,例如数据分布、隐式转换等。
但如果是个时间戳类型的字段,绑定变量显示的值可能就是形如78780610033C01的一个字符串,我们怎样将他转成可识别的时间戳?
此时,dbms_stats中的convert_raw_value存储过程,就起到了作用,
Convert the internal representation of a minimum or maximum value into a datatype-specific value
https://docs.oracle.com/cd/E11882_01/appdev.112/e40758/d_stats.htm#ARPLS68494
像直方图中的最大最小值、绑定变量中的时间戳类型,利用这个存储过程都可以将这些Oracle内部存储的值转换成BINARY_FLOAT、BINARY_DOUBLE、DATE、NUMBER和VARCHAR2等类型,
如下所示,convert_raw_value将字符串转换成日期类型存储到v_x变量中,通过to_date格式化,dbms_output.put_line打印出来,
SQL> set serveroutput onSQL> declare 2 v_x date; 3 v_result varchar2(100); 4 begin 5 dbms_stats.convert_raw_value('78780610033C01',v_x); 6 select to_char(v_x,'yyyy-mm-dd hh24:mi:ss') into v_result from dual; 7 dbms_output.put_line(v_result); 8 end; 9 /2020-06-16 02:59:00PL/SQL procedure successfully completed.
近期的热文:
《Oracle的批量插入操作》
《数据库结构文档的生成利器》
《主键约束索引的奇葩现象》
《如何判断应用系统性能好不好?》
《Oracle Cloud创建19c数据库》
《SQL工具集-格式化结果的SQL》
《如何捕获问题SQL解决过度CPU消耗的问题》
《如何查看JVM运行的堆内存情况》
《Oracle删除字段的方式和风险,你都了解么?》
《登录缓慢的诡异问题》
《公众号600篇文章分类和索引》