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

kesalahan resolusi nama fungsi oracle pl/sql

Masalahnya adalah salah satu resolusi nama.

Bila Anda memiliki parameter hostname dan hostname kolom di tabel yang Anda rujuk, aturan resolusi cakupan menyebabkan kebingungan bagi kebanyakan orang. Itu sebabnya banyak orang merekomendasikan menggunakan konvensi penamaan untuk parameter dan variabel lokal yang membedakannya dari nama tabel. Dalam kode saya, misalnya, saya menggunakan p_ untuk mengawali nama parameter dan l_ untuk mengawali variabel lokal.

Dalam kode Anda, bila Anda memiliki

SELECT mySystems.SYSTEMID
INTO SysID
FROM mySystems
where mySystems.HOSTNAME = Hostname;

hostname diselesaikan sebagai kolom dalam tabel, bukan parameter. Ini menyebabkan kueri mengembalikan setiap baris dalam tabel di mana hostname bukan nol yang menyebabkan kesalahan. Anda dapat secara eksplisit mengawali nama parameter dengan nama fungsi untuk memaksa hostname untuk menyelesaikan ke parameter

SELECT mySystems.SYSTEMID
INTO SysID
FROM mySystems
where mySystems.HOSTNAME = GET_SYSTEMID.Hostname;

Itu bekerja. Tetapi menambahkan awalan nama fungsi umumnya mengganggu. Jika Anda mengadopsi konvensi awalan nama parameter dan nama variabel lokal, Anda akan mendapatkan sesuatu seperti

FUNCTION GET_SYSTEMID(p_hostname varchar2)
RETURN NUMBER
IS
    l_sysID number;
BEGIN 
    SELECT mySystems.SYSTEMID
    INTO l_sysID
    FROM mySystems
    where mySystems.HOSTNAME = p_hostname;

    return l_sysID;
END GET_SYSTEMID;

Itu juga berfungsi dan cenderung (dalam pikiran saya) lebih jelas daripada menambahkan awalan nama fungsi eksplisit di semua tempat.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Konversi Oracle stempel waktu UNIX ke stempel waktu dengan zona waktu

  2. Oracle SQL - Hasilkan dan perbarui kolom dengan nomor acak berbeda di setiap baris

  3. Cara Mendefinisikan Kunci Utama Peningkatan Otomatis di Oracle

  4. Memilih bidang yang berbeda dan nomor baris hanya untuk menampilkan nomor id memberikan data yang digandakan

  5. Masukkan string uji BLOB yang lebih besar dari 2000 atau 4000 byte