Oracle FAQ | Your Portal to the Oracle Knowledge Grid |
Home -> Community -> Mailing Lists -> Oracle-L -> RE: SQL Text
Sanjay:
I use the folowing PL/SQL block to check on what is in the SGA. It ignores internal processes and the current session.
Hope this helps
Kevin
DECLARE
CURSOR c_session IS
SELECT ses.sid, ses.program, ses.sql_address, ses.username, ses.osuser
,ses.serial#, pro.spid FROM v$session ses ,v$process pro WHERE ses.username IS NOT NULL AND ses.username NOT IN ('DBSNMP', 'sys', 'SYS', 'system', 'SYSTEM') AND pro.addr = ses.paddr ORDER BY ses.sid, ses.program, ses.sql_address; CURSOR c_sql_text ( is_sql_address IN v$session.sql_address%TYPE ) IS SELECT txt.sql_text FROM v$sqltext_with_newlines txt WHERE txt.address = is_sql_address ORDER BY txt.piece; ls_stmt VARCHAR2(4000); PROCEDURE put_line ( is_string IN VARCHAR2 ) IS ln_len NUMBER(4) := LENGTH(is_string); ln_index NUMBER(4); ln_comma NUMBER(4); ln_space NUMBER(4); ln_oparn NUMBER(4); ln_cparn NUMBER(4); ln_equal NUMBER(4); ls_start VARCHAR2(4000); ls_end VARCHAR2(4000); BEGIN IF (ln_len <= 80) THEN IF (SUBSTR(is_string, ln_len, 1) = CHR(10)) THEN DBMS_OUTPUT.PUT(is_string); ELSE DBMS_OUTPUT.PUT_LINE(is_string); END IF; ELSE ln_index := INSTR(is_string, CHR(10)); IF (ln_index != 0) THEN ls_start := SUBSTR(is_string, 1, ln_index - 1); ls_end := SUBSTR(is_string, ln_index + 1, ln_len); put_line(ls_start); put_line(ls_end); ELSE ln_space := INSTR(is_string, ' ', 79-ln_len, 1); ln_comma := INSTR(is_string, ',', 79-ln_len, 1); ln_oparn := INSTR(is_string, '(', 79-ln_len, 1); ln_cparn := INSTR(is_string, ')', 79-ln_len, 1); ln_equal := INSTR(is_string, '=', 79-ln_len, 1); ln_index := GREATEST(ln_space, ln_comma, ln_oparn, ln_cparn ,ln_equal); IF (ln_index != 0) THEN ls_start := SUBSTR(is_string, 1, ln_index); ls_end := SUBSTR(is_string, ln_index + 1, ln_len); put_line(ls_start); put_line(ls_end); ELSE DBMS_OUTPUT.PUT_LINE('....' || SUBSTR(is_string, 1, 70)); END IF; END IF; END IF;
ls_stmt := NULL;
DBMS_OUTPUT.PUT('SID, SERIAL#, USER, OSUSER, SPID: '); DBMS_OUTPUT.PUT_LINE(r_session.sid || ', ' || r_session.serial# || ', ' || r_session.username || ', ' || r_session.osuser || ', ' || r_session.spid ); DBMS_OUTPUT.PUT_LINE(RPAD('_', 79, '_')); FOR r_sql_text in c_sql_text(r_session.sql_address) LOOP IF (ls_stmt IS NULL) THEN ls_stmt := r_sql_text.sql_text; ELSE ls_stmt := ls_stmt || r_sql_text.sql_text; END IF; END LOOP; put_line(ls_stmt); put_line('.');
-----Original Message-----
Sent: Tuesday, February 13, 2001 6:31 PM
To: Multiple recipients of list ORACLE-L
hi,
I want to see the latest SQL Statements that I sent to Database. I know that I can make use of V$sqlarea but it restricts only to first 1000 characters. But my query is more than that.
Any help.
Sanjay
--
Please see the official ORACLE-L FAQ: http://www.orafaq.com
--
Author: Toepke, Kevin M
INET: ktoepke_at_CMS.CENDANT.COM
Fat City Network Services -- (858) 538-5051 FAX: (858) 538-5051 San Diego, California -- Public Internet access / Mailing Lists --------------------------------------------------------------------To REMOVE yourself from this mailing list, send an E-Mail message to: ListGuru_at_fatcity.com (note EXACT spelling of 'ListGuru') and in the message BODY, include a line containing: UNSUB ORACLE-L (or the name of mailing list you want to be removed from). You may also send the HELP command for other information (like subscribing). Received on Wed Feb 14 2001 - 07:13:32 CST