请大神帮我看看下面两句Oracle sql的区别,本人不太懂oracle,谢谢大家

最近工作中遇到客户提供和自己产品中Oracle 锁进程指标的sql不一样,我对Oracle也不太懂,希望各位大神赐教!

sql 1

// sql 1
SELECT s.username 用户,
       s.machine 终端,
       s.client_info IP,
       s.osuser 终端用户名,
       s.program 进程,
       o.object_type 锁类型,
       o.object_name 被锁对象,
       s.SID || ',' || s.SERIAL# ID,
       'alter system disconnect session ''' || s.SID || ',' || s.SERIAL# ||
       ''' immediate;' 终止进程语句,
       decode(l.type, 'TM', 'TABLE LOCK', 'TX', 'ROW LOCK', NULL) 锁级别,
       o.owner,
       s.terminal,
       a.SQL_TEXT
  FROM v$session s, 
       gv$lock l, 
       dba_objects o, 
       v$sqlarea a
 WHERE l.sid = s.sid
   AND l.id1 = o.object_id(+)
   and l.type = 'TM'
   and s.PREV_SQL_ADDR = a.ADDRESS
   AND s.username is NOT NULL
 order by s.username, s.machine, s.SID || ',' || s.SERIAL#;

sql 2

// sql 2
select s1.INST_ID,
       s1.username||'@'||
       s1.machine||' (SID='||s1.sid||' ) is blocking '||
       s2.username||'@'||
       s2.machine||' ( SID='||s2.sid||' ) ' AS blocking_status 
from 
    gv$lock l1, 
    gv$session s1, 
    gv$lock l2, 
    gv$session s2 
where l1.INST_ID=s1.INST_ID 
      and s1.INST_ID=s2.INST_ID 
      and s2.INST_ID=l2.INST_ID 
      and s1.sid = l1.sid 
      and s2.sid = l2.sid 
      and l1.BLOCK = 1 
      and l2.request > 0 
      and l1.id1 = l2.id1 
      and l2.id2 = l2.id2;

这两个SQL查询语句都是用于查询Oracle数据库锁定进程的相关信息,但是它们的查询结果和查询的角度、信息细节都有所不同。

SQL1查询结果包括当前正在执行的Oracle会话信息、锁类型、锁对象、锁级别等信息,同时还返回了可以用来终止锁进程的SQL语句,具有较为详细的信息。

SQL2查询结果主要是展示了当前阻塞会话和被阻塞会话之间的关系,比如阻塞会话的用户名、进程终端信息、会话ID以及被阻塞会话的相关信息等,更注重整体阻塞关系的展示。

因此,两个SQL语句查询出来的结果不一样,可以根据不同的业务需求选择使用。