监控或者排查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 on
SQL> 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:00
PL/SQL procedure successfully completed.
近期的热文: