« Oracle SQL和PL/SQL中字符串单引号的处理 | Blog首页 | 恩墨学院DBA实战培训全新启航 »
Oracle中如何获取给定SQL的SQL_ID - dbms_sqltune_util0
作者:eygle | 【转载请注出处】|【云和恩墨 领先的zData数据库一体机 | zCloud PaaS云管平台 | SQM SQL审核平台 | ZDBM 数据库备份一体机】
链接:https://www.eygle.com/archives/2017/08/dbms_sqltune_util0_sqltext_to_sqlid.html
链接:https://www.eygle.com/archives/2017/08/dbms_sqltune_util0_sqltext_to_sqlid.html
在 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文章:
By eygle on 2017-08-07 19:33 | Comments (0) | Internal | 3261 |