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

Jaka jest różnica między zmiennymi PLSQL Bind a zmiennymi hosta?

Rozważ ten fragment C#:

int    v_empno = 7369;
string v_ename;

OracleCommand cmd = con.CreateCommand();
cmd.Parameters.Add("paramEmpno", OracleDbType.Decimal, v_empno, ParameterDirection.Input);
cmd.CommandText = "select e.ename from scott.emp e where e.empno = :1";
v_ename = cmd.ExecuteScalar().ToString();

v_empno i v_ename są zmiennymi hosta. Tutaj jawnie tworzysz zmienną bind do użycia jako :1 w swoim oświadczeniu.

Rozważ ten fragment PL/SQL:

declare
   v_empno  number := 7369;
   v_ename  varchar2(10);
begin
   select e.ename
     into v_ename
     from scott.emp e
    where e.empno = v_empno;
   dbms_output.put_line(v_ename);
end;
/

Ponownie zadeklarowane zmienne v_empno i v_ename można uznać za zmienne hosta, ale gdy są one używane w statycznym SQL w kodzie PL/SQL, są automatycznie przekształcane w zmienne wiązania przez kompilator/silnik PL/SQL - nie trzeba ręcznie tworzyć zmiennej wiązania, jak w Przykład C#. Jeśli przyjrzysz się SQL, który jest faktycznie wykonywany przez ten fragment PL/SQL, będzie on wyglądał mniej więcej tak:

   select e.ename
     from scott.emp e
    where e.empno = :B1

To jest kompilator PL/SQL, który automatycznie utworzył :B1 powiąż zmienną dla twojego v_empno Zmienna PL/SQL. I to właśnie Tom Kyte ma na myśli, że tak naprawdę nie można właściwie rozróżnić między zmienną hosta a zmienną powiązaną w PL/SQL. Podczas pisania w języku PL/SQL zmienne są zmiennymi hosta, gdy są używane w kodzie PL/SQL, a jednocześnie są zmiennymi wiążącymi, gdy są używane w kodzie osadzonego SQL. Nie musisz robić rozróżnienia w PL/SQL, kompilator zadba o to za Ciebie.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak szybko wybrać dane z Oracle

  2. Jak odzyskać lub zmienić hasło Oracle sysdba

  3. Podziel ciąg na spację i znak jako ogranicznik w Oracle za pomocą regexp_substr

  4. łącząca wyrocznię z r

  5. Alias ​​Nazwa kolumny w instrukcji wielokrotnej wielkości liter