Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Como declarar variável e usá-la no mesmo script Oracle SQL?


Existem várias maneiras de declarar variáveis ​​em scripts SQL*Plus.

A primeira é usar VAR, para declarar uma variável de ligação. O mecanismo para atribuir valores a um VAR é com uma chamada EXEC:
SQL> var name varchar2(20)
SQL> exec :name := 'SALES'

PL/SQL procedure successfully completed.

SQL> select * from dept
  2  where dname = :name
  3  /

    DEPTNO DNAME          LOC
---------- -------------- -------------
        30 SALES          CHICAGO

SQL>

Um VAR é particularmente útil quando queremos chamar um procedimento armazenado que tenha parâmetros OUT ou uma função.

Alternativamente, podemos usar variáveis ​​de substituição. Estes são bons para o modo interativo:
SQL> accept p_dno prompt "Please enter Department number: " default 10
Please enter Department number: 20
SQL> select ename, sal
  2  from emp
  3  where deptno = &p_dno
  4  /
old   3: where deptno = &p_dno
new   3: where deptno = 20

ENAME             SAL
---------- ----------
CLARKE            800
ROBERTSON        2975
RIGBY            3000
KULASH           1100
GASPAROTTO       3000

SQL>

Quando estamos escrevendo um script que chama outros scripts, pode ser útil definir as variáveis ​​antecipadamente. Este snippet é executado sem solicitar que eu insira um valor:
SQL> def p_dno = 40
SQL> select ename, sal
  2  from emp
  3  where deptno = &p_dno
  4  /
old   3: where deptno = &p_dno
new   3: where deptno = 40

no rows selected

SQL>

Finalmente, há o bloco PL/SQL anônimo. Como você vê, ainda podemos atribuir valores a variáveis ​​declaradas interativamente:
SQL> set serveroutput on size unlimited
SQL> declare
  2      n pls_integer;
  3      l_sal number := 3500;
  4      l_dno number := &dno;
  5  begin
  6      select count(*)
  7      into n
  8      from emp
  9      where sal > l_sal
 10      and deptno = l_dno;
 11      dbms_output.put_line('top earners = '||to_char(n));
 12  end;
 13  /
Enter value for dno: 10
old   4:     l_dno number := &dno;
new   4:     l_dno number := 10;
top earners = 1

PL/SQL procedure successfully completed.

SQL>