Oracle
 sql >> база данни >  >> RDS >> Oracle

Каква е разликата между PLSQL Bind променливите и хост променливите

Помислете за този фрагмент от 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 и v_ename са хост променливи. Тук изрично създавате вашата променлива за свързване за използване като :1 във вашето изявление.

Помислете за този фрагмент от 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;
/

Отново декларираните променливи v_empno и v_ename могат да се считат за хост променливи, но когато се използват в статичен SQL в рамките на PL/SQL кода, те автоматично се превръщат в обвързващи променливи от PL/SQL компилатора/двигателя - не е нужно ръчно да създавате вашата обвързваща променлива, както в C# пример. Ако разгледате SQL, който действително се изпълнява от тази част от PL/SQL, той ще изглежда по следния начин:

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

Това е PL/SQL компилаторът, който автоматично е създал :B1 свързваща променлива за вашия v_empno PL/SQL променлива. И това е, което Том Кайт има предвид, че не можете наистина да направите правилно разграничение между хост променлива и свързваща променлива в PL/SQL. Когато пишете PL/SQL, променливите са хост променливи, когато се използват в PL/SQL код и в същото време те са свързващи променливи, когато се използват във вградения SQL код. Не е необходимо да правите разлика в PL/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. flyway clean не изпуска задания или програми на планировчика

  2. Как да получите първия елемент от XPath в Oracle

  3. Как мога да извърша линейна интерполация с помощта на oracle SQL?

  4. BIN_TO_NUM() Функция в Oracle

  5. Проблем:Получаване на различни резултати от SUM заявки