Welcome 微信登录

首页 / 数据库 / MySQL / Oracle自定义过程来获得完整的sql语句

因为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)
表情: 姓名: 字数