eygle.com   eygle.com
eygle.com eygle
eygle.com  
 

« Oracle SQL和PL/SQL中字符串单引号的处理 | Blog首页 | 恩墨学院DBA实战培训全新启航 »

Oracle中如何获取给定SQL的SQL_ID - dbms_sqltune_util0
modb.pro

在 Oracle 数据库中,如何得到给定SQL的 SQL_ID ? 这是曾经被广泛讨论的一个问题。
现在,在Oracle 11g中,Oracle 给出了一个系统包,通过 dbms_sqltune_util0 可以简便的计算出给定SQL的SQL_ID。

SQL> desc dbms_sqltune_util0 FUNCTION EXTRACT_BIND RETURNS SQL_BIND Argument Name Type In/Out Default? ------------------------------ ----------------------- ------ -------- BIND_DATA RAW IN BIND_POS BINARY_INTEGER IN FUNCTION EXTRACT_BINDS RETURNS SQL_BIND_SET Argument Name Type In/Out Default? ------------------------------ ----------------------- ------ -------- BIND_DATA RAW IN FUNCTION GET_BINDS_COUNT RETURNS BINARY_INTEGER Argument Name Type In/Out Default? ------------------------------ ----------------------- ------ -------- BIND_DATA RAW IN FUNCTION IS_BIND_MASKED RETURNS NUMBER Argument Name Type In/Out Default? ------------------------------ ----------------------- ------ -------- BIND_POS BINARY_INTEGER IN MASKED_BINDS_FLAG RAW IN DEFAULT FUNCTION SQLTEXT_TO_SIGNATURE RETURNS NUMBER Argument Name Type In/Out Default? ------------------------------ ----------------------- ------ -------- SQL_TEXT CLOB IN FORCE_MATCH BINARY_INTEGER IN DEFAULT FUNCTION SQLTEXT_TO_SQLID RETURNS VARCHAR2 Argument Name Type In/Out Default? ------------------------------ ----------------------- ------ -------- SQL_TEXT CLOB IN FUNCTION VALIDATE_SQLID RETURNS BINARY_INTEGER Argument Name Type In/Out Default? ------------------------------ ----------------------- ------ -------- SQL_ID VARCHAR2 IN
函数 sqltext_to_sqlid 用于实现这个功能,以下测试使用了一个简单的SQL查询。
注意Oracle在SQL最后加入一个 chr(0) 的不可见字符,我们需要补齐:
SQL> select dbms_sqltune_util0.sqltext_to_sqlid('select sysdate from dual'||chr(0)) sql_id from dual;

SQL_ID
-------------------------------------------------------
7h35uxf5uhmm1

接下来看一下执行这个查询,数据库中自动生成的SQL_ID,与通过函数转换生成的完全一致:
SQL> select sysdate from dual;

SYSDATE
------------
07-AUG-17

SQL> select sql_id from v$sql where sql_text='select sysdate from dual';

SQL_ID
-------------
7h35uxf5uhmm1

Oracle 的改进一点点向前。


历史上的今天...
    >> 2018-08-07文章:
    >> 2012-08-07文章:
    >> 2009-08-07文章:
    >> 2007-08-07文章:
    >> 2005-08-07文章:
           Jan Dara 2-晚娘II

By eygle on 2017-08-07 19:33 | Comments (0) | Internal | 3261 |


CopyRight © 2004~2020 云和恩墨,成就未来!, All rights reserved.
数据恢复·紧急救援·性能优化 云和恩墨 24x7 热线电话:400-600-8755 业务咨询:010-59007017-7040 or 7037 业务合作: marketing@enmotech.com