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

Gọi hàm riêng trong phần thân gói

Vấn đề bạn gặp phải (giả sử rằng bạn đang gọi thủ tục / hàm được đặt tên chính xác theo cách chính xác) là bạn đang cố gọi một hàm chưa được khai báo. Có hai cách để giải quyết vấn đề này, giả sử bạn muốn giữ hàm ở chế độ riêng tư:

  1. Khai báo hàm ADD_STUDENT trước bất kỳ thủ tục / hàm nào gọi nó.
  2. Sử dụng khai báo chuyển tiếp để khai báo hàm trước khi nó được gọi.

Vì vậy, đối với tùy chọn 1, mã mẫu của bạn sẽ giống như sau:

PACKAGE BODY SCHOOL AS
    FUNCTION ADD_STUDENT(...)
        ...
    END ADD_STUDENT;

    PROCEDURE ADD_PEOPLE(...)
        ...
        some_var := ADD_STUDENT();
    END ADD_PEOPLE;
END SCHOOL;
/

Và đối với tùy chọn 2, mã của bạn sẽ giống như sau:

PACKAGE BODY SCHOOL AS
    -- forward declared function
    FUNCTION ADD_STUDENT(...);

    PROCEDURE ADD_PEOPLE(...)
        ...
        some_var := ADD_STUDENT();
    END ADD_PEOPLE;

    FUNCTION ADD_STUDENT(...)
        ...
    END ADD_STUDENT;
END SCHOOL;
/

Cá nhân, tôi thích tùy chọn 1, vì nó có nghĩa là có ít thứ lộn xộn hơn trong phần thân gói, nhưng tùy chọn 2 có thể cần thiết nếu bạn có hai mô-đun tham chiếu lẫn nhau.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm thế nào để đếm số phần tử trong tất cả các varrays Oracle từ bảng?

  2. Nối hàng Oracle SQL theo dấu chấm

  3. Hết thời gian chờ của OracleDataAdapter.Fill ()

  4. Oracle:Tại sao tôi không thể dựa vào ROWNUM trong mệnh đề xóa

  5. Oracle thiếu kiểu dữ liệu Bit cho các cột bảng