Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Memanggil fungsi pribadi di dalam badan paket

Masalah yang Anda miliki (dengan asumsi bahwa Anda memanggil prosedur/fungsi dengan nama yang benar dengan cara yang benar) adalah bahwa Anda mencoba memanggil panggilan ke fungsi yang belum dideklarasikan. Ada dua cara untuk mengatasinya, dengan asumsi Anda ingin merahasiakan fungsi tersebut:

  1. Deklarasikan fungsi ADD_STUDENT sebelum prosedur/fungsi apa pun yang menjalankannya.
  2. Gunakan pernyataan penerusan untuk mendeklarasikan fungsi sebelum dipanggil.

Jadi, untuk opsi 1, kode contoh Anda akan terlihat seperti:

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

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

Dan untuk opsi 2 kode Anda akan terlihat seperti:

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

Secara pribadi, saya menyukai opsi 1, karena itu berarti lebih sedikit hal yang mengacaukan isi paket, tetapi opsi 2 mungkin diperlukan jika Anda memiliki dua modul yang saling merujuk.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Buat pemicu yang memperbarui kolom di satu tabel saat kolom di tabel lain diperbarui

  2. periode batas waktu berlalu. semua koneksi yang dikumpulkan sedang digunakan dan ukuran kumpulan maksimum tercapai

  3. Mengapa saya mendapatkan kesalahan java.lang.AbstractMethodError:oracle.jdbc.driver.OracleConnection?

  4. Doktrin 2:kaskade bertahan Oracle IDENTITY mengembalikan 0 sebagai ID yang terakhir dimasukkan

  5. Cara Menghapus Padding yang Tepat pada Nama Hari di Oracle