sql >> Database >  >> RDS >> Oracle

Hoe variabele declareren en gebruiken in hetzelfde Oracle SQL-script?

Er zijn verschillende manieren om variabelen in SQL*Plus-scripts te declareren.

De eerste is om VAR te gebruiken, om een ​​bindvariabele te declareren. Het mechanisme voor het toewijzen van waarden aan een VAR is met een EXEC-aanroep:

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>

Een VAR is vooral handig als we een opgeslagen procedure willen aanroepen die OUT-parameters of een functie heeft.

Als alternatief kunnen we substitutievariabelen gebruiken. Deze zijn goed voor de interactieve 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>

Als we een script schrijven dat andere scripts aanroept, kan het handig zijn om de variabelen vooraf te DEFINIEREN. Dit fragment wordt uitgevoerd zonder mij te vragen een waarde in te voeren:

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>

Ten slotte is er het anonieme PL/SQL-blok. Zoals u ziet, kunnen we nog steeds interactief waarden toewijzen aan gedeclareerde variabelen:

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>


  1. Multi-datacenterconfiguraties met PostgreSQL

  2. Cloud Vendor Deep-Dive:PostgreSQL op Microsoft Azure

  3. orakel varchar naar nummer

  4. Wat is SQL? Wat is een databank? Relationele databasebeheersystemen (RDBMS) uitgelegd in gewoon Engels.