Internal
2017-08-07
Oracle中如何获取给定SQL的SQL_ID - dbms_sqltune_util0
在 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 如何彻底删除MSN9 及 清理 IMSC12
- 2009-08-07 如何 DUMP ASH 信息至跟踪文件
- 2007-08-07 2007上海Oracle Open World记事-之三
- 2007-08-07 《循序渐进Oracle》第一章连载-之十
- 2005-08-07 丽塔·海华丝和肖申克的救赎
- 2005-08-07 Jan Dara 2-晚娘II
- 2005-08-07 对referrers.cgi(反向链接)的一点调整