Oracle自訂過程來獲得完整的sql語句

來源:互聯網
上載者:User

因為Oracle將sql共用之後,截取出來的sql語句是帶變數的

建立一個函數 jy_getsql來獲得執行時的完整sql語句

CREATE OR REPLACE FUNCTION jy_getsql (my_sql_id in varchar2)

RETURN clob

IS

Result  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;

 


EXCEPTION

WHEN OTHERS

THEN

RETURN 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 p

where s.username is not null and s.PADDR=p.ADDR

and 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子句中的綁定變數還是有了

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.