SQL em Oracle > O ambiente SQL*Plus > Variáveis para SQL > & e &&
& e && tl_logo2.jpg


Variável definida com &

Uma variável funciona como um recipiente onde são armazenados valores temporariamente. É possivel utilizar variáveis para guardar valores que serão usados no momento da execução do comando SQL.

O comando abaixo solicita ao utilizador um número de departamento quando é executado:

SELECT empno,ename,sal
FROM emp
WHERE deptno = &numero_departamento;
Enter value for numero_departamento: 20
old   3: WHERE deptno = &numero_departamento
new   3: WHERE deptno = 20

     EMPNO ENAME             SAL
---------- ---------- ----------
      7369 SMITH             800
      7566 JONES            2975
      7788 SCOTT            3000
      7876 ADAMS            1100
      7902 FORD             3000

Quando os valores solicitados são do tipo caracter ou data a base de dados exige que sejam introduzidos entre plicas ('). Para evitar o uso das plicas podemos usar uma variável de susbstituição, como no exemplo abaixo:

SELECT ename,deptno, sal*12
FROM emp
WHERE job = '&funcao';
Enter value for funcao: CLERK
old   3: WHERE job = '&funcao'
new   3: WHERE job = 'CLERK'

ENAME          DEPTNO     SAL*12
---------- ---------- ----------
SMITH              20       9600
ADAMS              20      13200
JAMES              30      11400
MILLER             10      15600

É possivel pedir uma expressão aritmética para uma variável de substituição, como no exemplo seguinte:

SELECT deptno, &expressao
FROM emp;
Enter value for expressao: sal*14+nvl(comm,0)
old   1: SELECT deptno, &expressao
new   1: SELECT deptno, sal*14+nvl(comm,0)

    DEPTNO SAL*14+NVL(COMM,0)
---------- ------------------
        20              11200
        30              22700
        30              18000
        20              41650
        30              18900
        30              39900
        10              34300
        20              42000
        10              70000
        30              21000
        20              15400

    DEPTNO SAL*14+NVL(COMM,0)
---------- ------------------
        30              13300
        20              42000
        10              18200

14 rows selected.

bthome.gifTopo


Variável definida com &&

Quando a variável é precedida com && o SQL*Plus pedirá o valor uma única vez, pois armazena o valor fornecido e utiliza-o sempre que uma instrução SQL faça referência a essa variável durante a sessão.

SELECT ename, deptno, job
FROM emp
WHERE DEPTNO = &&numero_departamento;
Enter value for numero_departamento: 10
old   3: WHERE DEPTNO = &&numero_departamento
new   3: WHERE DEPTNO = 10

ENAME          DEPTNO JOB
---------- ---------- ---------
CLARK              10 MANAGER
KING               10 PRESIDENT
MILLER             10 CLERK
/
old   3: WHERE DEPTNO = &&numero_departamento
new   3: WHERE DEPTNO = 10

ENAME          DEPTNO JOB
---------- ---------- ---------
CLARK              10 MANAGER
KING               10 PRESIDENT
MILLER             10 CLERK

O comando DEFINE pode ser utilizado para verificar se uma variável tem conteúdo (está definida):

DEFINE
DEFINE _DATE           = "06.06.16" (CHAR)
DEFINE _CONNECT_IDENTIFIER = "XE" (CHAR)
DEFINE _USER           = "HR" (CHAR)
DEFINE _PRIVILEGE      = "" (CHAR)
DEFINE _SQLPLUS_RELEASE = "1002000100" (CHAR)
DEFINE _EDITOR         = "C:\Program Files\UltraEdit\uedit32.exe" (CHAR)
DEFINE _O_VERSION      = "Oracle Database 10g Express Edition Release 10.2.0.1.0 - Production" (CHAR)
DEFINE _O_RELEASE      = "1002000100" (CHAR)
DEFINE _RC             = "1" (CHAR)
DEFINE NUMERO_DEPARTAMENTO = "10" (CHAR)

bthome.gifTopo


Substituição de parte do comando

Como os dados contidos nas variáveis de substituição são inseridos no comando antes da sua execução, a variável pode ser utilizada para definir qualquer parte da estrutura do comando, excepto a palavra reservada SELECT. No exemplo abaixo é utilizada uma variável de substituição para a condição da claúsula WHERE:

SELECT empno, ename, sal, comm
FROM emp
WHERE &condicao;
Enter value for condicao: JOB='CLERK'
old   3: WHERE &condicao
new   3: WHERE JOB='CLERK'

     EMPNO ENAME             SAL       COMM
---------- ---------- ---------- ----------
      7369 SMITH             800
      7876 ADAMS            1100
      7900 JAMES             950
      7934 MILLER           1300

bthome.gifTopo


Realizado por Turtle Learning ®. Última alteração em 2011-08-15