SQL em Oracle > DML > Funções > Funções de linha > Funções especiais
Funções especiais tl_logo2.jpg

A lista abaixo possui funções especiais, que em alguns contextos podem ser enquadradas como "pseudo-colunas" da tabela.


USER

Mostra o nome do utilizador Oracle que abriu sessão.

select user from dual;
USER                           
------------------------------ 
HR                             

1 rows selected

bthome.gifTopo


UID

Mostra o número que a base de dados atribuiu ao utilizador.

select user,uid from dual;
USER                           UID                    
------------------------------ ---------------------- 
HR                             33                     

1 rows selected

bthome.gifTopo


USERENV(arg)

Devolve dados da sessão actual. Os valores de arg podem ser:

A partir da versão 9i esta função ganhou importancia sobre o ponto de vista de segurança. Na sessão ficam guardados dados que permitem à base de dados associar utilizadores genéricos a utilizadores particulares. Uma explicação detalhada deste ponto encontra-se no manual de Segurança.

select 
  userenv('LANGUAGE'),
  userenv('LANG'),
  userenv('INSTANCE'),
  userenv('TERMINAL'),
  userenv('SESSIONID')
from dual;
USERENV('LANGUAGE')                                  USERENV('LANG')                                      USERENV('INSTANCE')    USERENV('TERMINAL') USERENV('SESSIONID')   
---------------------------------------------------- ---------------------------------------------------- ---------------------- ------------------- ---------------------- 
PORTUGUESE_PORTUGAL.WE8MSWIN1252                     PT                                                   1                                          914                    

1 rows selected

bthome.gifTopo


ROWID

Devolve o rowid que o Oracle atribuiu a cada linha. Este é usado pela base de dados para identificar univocamente cada linha. O acesso a uma linha via rowid é o mais rápido que a base de dados sabe executar. Por isto os índices guardam o rowid associado a cada linha.

select rowid, e.* from emp e;
ROWID EMPNO                  ENAME      JOB       MGR                    HIREDATE                  SAL                    COMM                   DEPTNO                 
----- ---------------------- ---------- --------- ---------------------- ------------------------- ---------------------- ---------------------- ---------------------- 
AAADVsAAEAAAAGXAAA 7369                   SMITH      CLERK     7902                   80.12.17                  800                                           20                     
AAADVsAAEAAAAGXAAB 7499                   ALLEN      SALESMAN  7698                   81.02.20                  1600                   300                    30                     
AAADVsAAEAAAAGXAAC 7521                   WARD       SALESMAN  7698                   81.02.22                  1250                   500                    30                     
AAADVsAAEAAAAGXAAD 7566                   JONES      MANAGER   7839                   81.04.02                  2975                                          20                     
AAADVsAAEAAAAGXAAE 7654                   MARTIN     SALESMAN  7698                   81.09.28                  1250                   1400                   30                     
AAADVsAAEAAAAGXAAF 7698                   BLAKE      MANAGER   7839                   81.05.01                  2850                                          30                     
AAADVsAAEAAAAGXAAG 7782                   CLARK      MANAGER   7839                   81.06.09                  2450                                          10                     
AAADVsAAEAAAAGXAAH 7788                   SCOTT      ANALYST   7566                   82.12.09                  3000                                          20                     
AAADVsAAEAAAAGXAAI 7839                   KING       PRESIDENT                        81.11.17                  5000                                          10                     
AAADVsAAEAAAAGXAAJ 7844                   TURNER     SALESMAN  7698                   81.09.08                  1500                   0                      30                     
AAADVsAAEAAAAGXAAK 7876                   ADAMS      CLERK     7788                   83.01.12                  1100                                          20                     
AAADVsAAEAAAAGXAAL 7900                   JAMES      CLERK     7698                   81.12.03                  950                                           30                     
AAADVsAAEAAAAGXAAM 7902                   FORD       ANALYST   7566                   81.12.03                  3000                                          20                     
AAADVsAAEAAAAGXAAN 7934                   MILLER     CLERK     7782                   82.01.23                  1300                                          10                     

14 rows selected

O rowid é interpretado como uma coluna e portanto pode ser consultado:

select rowid, e.* from emp e where rowid='AAADVsAAEAAAAGXAAI';
ROWID              EMPNO                  ENAME      JOB       MGR                    HIREDATE                  SAL                    COMM                   DEPTNO                 
------------------ ---------------------- ---------- --------- ---------------------- ------------------------- ---------------------- ---------------------- ---------------------- 
AAADVsAAEAAAAGXAAI 7839                   KING       PRESIDENT                        81.11.17                  5000                                          10                     

1 rows selected

bthome.gifTopo


ROWNUM

Devolve o número da linha dentro do resultado do query. O número é atribuido de acordo com a ordem em que as linhas são retiradas da tabela. Esta ordem é definida antes do ORDER BY, pois este é feito depois do "resultSet" estar criado.

prompt Listagem simples
select rownum,ename,job from emp;
prompt Listagem por ordem crescente de ename;
select rownum,ename,job from emp order by ename;
prompt Listagem por ordem decrescente de ename
select rownum,ename,job from emp order by ename desc;
Listagem simples

ROWNUM                 ENAME      JOB       
---------------------- ---------- --------- 
1                      SMITH      CLERK     
2                      ALLEN      SALESMAN  
3                      WARD       SALESMAN  
4                      JONES      MANAGER   
5                      MARTIN     SALESMAN  
6                      BLAKE      MANAGER   
7                      CLARK      MANAGER   
8                      SCOTT      ANALYST   
9                      KING       PRESIDENT 
10                     TURNER     SALESMAN  
11                     ADAMS      CLERK     
12                     JAMES      CLERK     
13                     FORD       ANALYST   
14                     MILLER     CLERK     

14 rows selected


Listagem por ordem crescente de ename

ROWNUM                 ENAME      JOB       
---------------------- ---------- --------- 
11                     ADAMS      CLERK     
2                      ALLEN      SALESMAN  
6                      BLAKE      MANAGER   
7                      CLARK      MANAGER   
13                     FORD       ANALYST   
12                     JAMES      CLERK     
4                      JONES      MANAGER   
9                      KING       PRESIDENT 
5                      MARTIN     SALESMAN  
14                     MILLER     CLERK     
8                      SCOTT      ANALYST   
1                      SMITH      CLERK     
10                     TURNER     SALESMAN  
3                      WARD       SALESMAN  

14 rows selected


Listagem por ordem decrescente de ename

ROWNUM                 ENAME      JOB       
---------------------- ---------- --------- 
3                      WARD       SALESMAN  
10                     TURNER     SALESMAN  
1                      SMITH      CLERK     
8                      SCOTT      ANALYST   
14                     MILLER     CLERK     
5                      MARTIN     SALESMAN  
9                      KING       PRESIDENT 
4                      JONES      MANAGER   
12                     JAMES      CLERK     
13                     FORD       ANALYST   
7                      CLARK      MANAGER   
6                      BLAKE      MANAGER   
2                      ALLEN      SALESMAN  
11                     ADAMS      CLERK     

14 rows selected

A função ROWNUM conjugada com uma sub consulta pode ser usada para resolver o seguinte problema: quais são os 3 empregados com o maior salário?

select * 
from (select ename, sal from emp order by sal desc)
where rownum <= 3;
ENAME      SAL                    
---------- ---------------------- 
KING       5000                   
SCOTT      3000                   
FORD       3000                   

3 rows selected

O SGBD MySQL permite a utilização da clausula LIMIT numa consulta que permite, por um lado, obter as n primeiras linhas do query, como o exemplo anterior, e por outro mostrar por exemplo apenas as linhas 3, 4 e 5 do query, por exemplo LIMIT 3,5. Esta funcionalidade pode ser obtida em Oracle recorrendo a duas sub consultas encadeadas e à função ROWNUM.

select * 
from ( select a.*, rownum rnum
       from ( select * 
              from emp 
              order by ename ) a
       where rownum <= 5 )
 where rnum >= 3
ENAME      EMPNO                  RNUM                   
---------- ---------------------- ---------------------- 
BLAKE      7698                   3                      
CLARK      7782                   4                      
FORD       7902                   5                                    

bthome.gifTopo


ORA_ROWSCN

Esta função devolve o último System Change Number que alterou a linha da tabela. Só pode ser utilizada a partir da versão 10g.

select ora_rowscn, e.* from emp e;
ORA_ROWSCN             EMPNO                  ENAME      JOB       MGR                    HIREDATE                  SAL                    COMM                   DEPTNO                 
---------------------- ---------------------- ---------- --------- ---------------------- ------------------------- ---------------------- ---------------------- ---------------------- 
306114                 7369                   SMITH      CLERK     7902                   80.12.17                  800                                           20                     
306114                 7499                   ALLEN      SALESMAN  7698                   81.02.20                  1600                   300                    30                     
306114                 7521                   WARD       SALESMAN  7698                   81.02.22                  1250                   500                    30                     
306114                 7566                   JONES      MANAGER   7839                   81.04.02                  2975                                          20                     
306114                 7654                   MARTIN     SALESMAN  7698                   81.09.28                  1250                   1400                   30                     
306114                 7698                   BLAKE      MANAGER   7839                   81.05.01                  2850                                          30                     
306114                 7782                   CLARK      MANAGER   7839                   81.06.09                  2450                                          10                     
306114                 7788                   SCOTT      ANALYST   7566                   82.12.09                  3000                                          20                     
306114                 7839                   KING       PRESIDENT                        81.11.17                  5000                                          10                     
306114                 7844                   TURNER     SALESMAN  7698                   81.09.08                  1500                   0                      30                     
306114                 7876                   ADAMS      CLERK     7788                   83.01.12                  1100                                          20                     
306114                 7900                   JAMES      CLERK     7698                   81.12.03                  950                                           30                     
306114                 7902                   FORD       ANALYST   7566                   81.12.03                  3000                                          20                     
306114                 7934                   MILLER     CLERK     7782                   82.01.23                  1300                                          10                     

14 rows selected

bthome.gifTopo


Realizado por Turtle Learning ®. Última alteração em 2012-05-01