Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Sự khác biệt giữa biến PLSQL Bind và biến Host là gì

Hãy xem xét đoạn mã này của 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_empnov_ename là các biến máy chủ. Tại đây, bạn tạo rõ ràng biến liên kết của mình để sử dụng làm :1 trong tuyên bố của bạn.

Hãy xem xét đoạn mã PL / SQL này:

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;
/

Một lần nữa các biến đã khai báo v_empnov_ename có thể được coi là biến máy chủ, nhưng khi chúng được sử dụng trong SQL tĩnh trong mã PL / SQL, chúng sẽ tự động được chuyển thành biến ràng buộc bởi trình biên dịch / engine PL / SQL - bạn không phải tạo thủ công biến liên kết của mình như trong Ví dụ C #. Nếu bạn kiểm tra SQL thực sự được thực thi bởi đoạn PL / SQL này, nó sẽ trông giống như sau:

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

Đó là trình biên dịch PL / SQL đã tự động tạo :B1 biến ràng buộc cho v_empno của bạn Biến PL / SQL. Và đó là những gì Tom Kyte có nghĩa là bạn không thể thực sự phân biệt chính xác giữa biến máy chủ và biến liên kết trong PL / SQL. Khi bạn viết PL / SQL, các biến là biến chủ khi được sử dụng trong mã PL / SQL và đồng thời chúng là biến ràng buộc khi được sử dụng trong mã SQL nhúng. Bạn không cần phải phân biệt trong PL / SQL, trình biên dịch sẽ lo việc đó cho bạn.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cơ sở dữ liệu sao chép Oracle SQL Developer từng bước

  2. Đóng ResultSet nhưng không đóng PreparedStatement

  3. Làm thế nào để liệt kê tất cả các thủ tục được lưu trữ trong cơ sở dữ liệu Oracle

  4. EM 12c Điều chỉnh Giá trị Ngưỡng

  5. Tên cột SQL giống với tên biến PL / SQL - Điều này có thể được thực hiện như thế nào trong một câu lệnh select?