因为Oracle将sql共享之后,截取出来的sql语句是带变量的创建一个函数 jy_getsql来获得执行时的完整sql语句CREATE OR REPLACE FUNCTION jy_getsql (my_sql_id in varchar2)RETURN clobISResult clob;
cursor jl(p_sql_id in varchar2) is select decode(instr(b.BIND_NAME,"SYS"),0,":"||b.BIND_NAME||"",""||chr(58)||chr(34)||b.BIND_NAME||chr(34)||"") name,
decode(b.DATATYPE,2,dbms_sqltune.extract_bind(a.bind_data,b.POSITION).value_string ,""""||dbms_sqltune.extract_bind(a.bind_data,b.POSITION).value_string ||"""") value_string from v$sqlarea a ,v$sql_bind_metadata b where a.LAST_ACTIVE_CHILD_ADDRESS = b.ADDRESS and a.SQL_ID = p_sql_id order by b.POSITION desc;
BEGIN select a.SQL_FULLTEXT into Result from v$sqlarea a where a.SQL_ID=my_sql_id;
for r in jl(my_sql_id) loop Result := replace(Result,r.name,r.value_string); end loop;
RETURN Result;
EXCEPTIONWHEN OTHERSTHENRETURN Result;END;下面的查询是查询数据库当前正处于等待状态的sql语句select sw.sid,s.username,sw.event,sw.wait_time,sw.state,sw.seconds_in_wait,p.PROGRAM,s.MACHINE,(select c.SQL_FULLTEXT from v$sqlarea c where c.SQL_ID=s.SQL_ID) sql_fulltext,(select c.BIND_DATA from v$sqlarea c where c.SQL_ID=s.SQL_ID) BIND_DATA,s.SQL_ID,jy_getsql(s.SQL_ID)from v$session s,v$session_wait sw,v$process pwhere s.username is not null and s.PADDR=p.ADDRand sw.sid=s.sid and sw.event not like"%SQL*Net%"order by sw.wait_time desc但是这还有一缺点就是select 1 userid from dual这个1没有在v$sqlarea.bind_data中但where子句中的绑定变量还是有了PL/SQL: ORA-00942: table or view does not existOracle丢失inactive日志文件的恢复操作过程相关资讯 Oracle SQL语句
- Oracle SQL语句追踪 (05/09/2015 09:42:25)
- Oracle执行SQL查询语句的步骤 (09/26/2014 19:40:59)
- Oracle体系结构之SQL语句的执行过 (09/15/2013 07:16:35)
| - 最权威Oracle获取SQL语句执行计划 (05/07/2015 19:22:48)
- Oracle数据库SQL语句的执行过程 (10/12/2013 17:37:20)
- Oracle和SQL Server在SQL语句上的 (07/26/2013 10:14:27)
|
本文评论 查看全部评论 (0)