Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Jak zadeklarować zmienną i użyć jej w tym samym skrypcie Oracle SQL?

Istnieje kilka sposobów deklarowania zmiennych w skryptach SQL*Plus.

Pierwszym z nich jest użycie VAR, aby zadeklarować zmienną wiązania. Mechanizm przypisywania wartości do VAR polega na wywołaniu 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>

VAR jest szczególnie przydatny, gdy chcemy wywołać procedurę składowaną, która ma parametry OUT lub funkcję.

Alternatywnie możemy użyć zmiennych substytucyjnych. Są one dobre w trybie interaktywnym:

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>

Kiedy piszemy skrypt, który wywołuje inne skrypty, przydatne może być wcześniejsze zdefiniowanie zmiennych. Ten fragment kodu działa bez monitowania o wprowadzenie wartości:

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>

Wreszcie jest anonimowy blok PL/SQL. Jak widać, nadal możemy interaktywnie przypisywać wartości do zadeklarowanych zmiennych:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. 12c Przestarzałe funkcje

  2. Konfigurowanie środowiska programistycznego do nauki języka PL/SQL

  3. Oracle.DataAccess.Client.OracleException ORA-03135:utrata połączenia

  4. brakujący błąd słowa kluczowego w instrukcji Oracle CASE WHEN sql

  5. Oracle SQL Godziny Różnica między datami w GG:MM:SS