DBCC INPUTBUFFER w Oracle ?

0

Czy, a jeśli tak - jak? - można użyć DBCC INPUTBUFFER w Oracle? Chcę przechwycić triggerem ostatnio wykonane na tabeli zapytanie, w SQLServ jest to select execute(DBCC INPUTBUFFER(@@SSPID), zgadza się? Mam problem z zastosowaniem tego pod Oracle'em

0

zapoznaj się z widokiem v$sql

0

Działa bardzo fajnie, dzięki !
Używam w triggerze np. mniej więcej tego co poniżej

select sql_text, sesion.username
  from v$sqltext sqltext, v$session sesion
 where sesion.sql_hash_value = sqltext.hash_value
   and sesion.sql_address    = sqltext.address
   and sesion.username <> 'SYSMAN'
 order by sqltext.piece;

jednak zwraca mi ciało zapytania w kilku (aktualnie 4) wierszach, a chcę go pobrać w triggerze i zapisać do tabeli logu, można to wrzucić w jakiś sposób tak, by mieściło się w jednej zmiennej varchar np.?

Bez ", sesion.username" oczywiście, jedna kolumna

0

w v$sql masz sql_fulltext

0

W triggerze

create or replace trigger trig after
insert or update
on table
for each row
declare
sessid number;
queryBody varchar(1000);
begin
select sys_context('USERENV','SID') into sessid from dual;
--select execute('DBCC INPUTBUFFER (sessid) WITH NO_INFOMSGS;') into queries from dual;
select sql_fulltext  into querybody
  from v$sql vsql, v$session sesion
 where sesion.sql_hash_value = vsql.hash_value
   and sesion.sql_address = vsql.address
   and sesion.sid = sessid--is not null
   and sesion.username <> 'SYSMAN'
   --and sesion.username = user
   and sesion.command = 2 -- insert
   or sesion.command = 6; -- update
 --order by sqltext.piece;
insert into queries (qbody) values (queryBody);
end;

rezultat zwracany do tabeli jest treścią zapytania wyciągającego ostatnie zapytanie, jak dobrać się do ciała inserta lub update'a, który wyzwolił trigger? Szukam tego, kominuję z sys_contextem i nie potrafię zmusić tego do wybrania treści update'a

1 użytkowników online, w tym zalogowanych: 0, gości: 1