Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Wie deklariere ich eine Variable und verwende sie im selben Oracle SQL-Skript?

Es gibt mehrere Möglichkeiten, Variablen in SQL*Plus-Skripten zu deklarieren.

Die erste besteht darin, VAR zu verwenden, um eine Bindungsvariable zu deklarieren. Der Mechanismus zum Zuweisen von Werten zu einer VAR erfolgt mit einem EXEC-Aufruf:

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>

Ein VAR ist besonders nützlich, wenn wir eine gespeicherte Prozedur aufrufen möchten, die OUT-Parameter oder eine Funktion hat.

Alternativ können wir Substitutionsvariablen verwenden. Diese sind gut für den interaktiven Modus:

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>

Wenn wir ein Skript schreiben, das andere Skripte aufruft, kann es nützlich sein, die Variablen im Voraus zu DEFinieren. Dieses Snippet wird ausgeführt, ohne dass ich aufgefordert werde, einen Wert einzugeben:

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>

Schließlich gibt es noch den anonymen PL/SQL-Block. Wie Sie sehen, können wir deklarierten Variablen immer noch interaktiv Werte zuweisen:

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>