Funções especiais |
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 |
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 |
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 |
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 |
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 |
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 |
Realizado por Turtle Learning ®. Última alteração em 2012-05-01