Nâng caoOracle PL/SQL ~14 phút

Procedure parameters — IN / OUT / IN OUT

Parameter mode là contract giữa caller và procedure; chọn sai mode khiến API PL/SQL khó dùng và dễ tạo side effect bất ngờ.

Lý thuyết

Ba parameter mode

  • IN: procedure đọc giá trị nhưng không gán lại cho formal parameter.
  • OUT: giá trị ban đầu của biến caller không có ý nghĩa; procedure phải ghi kết quả trước khi kết thúc.
  • IN OUT: caller truyền giá trị ban đầu và nhận lại giá trị đã được procedure thay đổi.

Nếu không ghi mode, Oracle mặc định là IN.

Positional và named notation

apply_capped_raise(1, v_raise, v_salary) phụ thuộc thứ tự. Named notation p_employee_id => 1 dài hơn nhưng an toàn khi procedure có nhiều tham số.

Có thể trộn positional trước và named sau, nhưng không được quay lại positional sau khi đã dùng named notation.

Dùng %TYPE

employees.salary%TYPE giúp biến PL/SQL tự đồng bộ kiểu với cột. Khi schema đổi kiểu salary, code ít bị lệch hơn so với hard-code NUMBER.

Ví dụ IN OUT

Caller yêu cầu tăng 900. Procedure giới hạn mức tăng tối đa 500 rồi ghi 500 ngược vào biến IN OUT; OUT trả salary mới.

IN OUT hữu ích nhưng làm API khó đoán hơn. Nếu không cần ghi ngược, ưu tiên tách thành một IN và một OUT rõ nghĩa.

Thuật ngữ (di chuột để xem giải thích)

Dữ liệu mẫu

Đang tải dữ liệu mẫu…