Oracle
 sql >> Baza danych >  >> RDS >> Oracle

oracle błąd rozpoznawania nazw funkcji pl/sql

Problemem jest rozwiązywanie nazw.

Gdy masz parametr hostname i hostname w tabeli, do której się odwołujesz, reguły rozpoznawania zakresu powodują zamieszanie większości ludzi. Dlatego wiele osób zaleca stosowanie konwencji nazewnictwa parametrów i zmiennych lokalnych, która odróżnia je od nazw tabel. W moim kodzie na przykład używam p_ aby poprzedzić nazwy parametrów i l_ aby poprzedzać zmienne lokalne.

W kodzie, jeśli masz

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

hostname jest rozpoznawany jako kolumna w tabeli, a nie parametr. Powoduje to, że zapytanie zwraca każdy wiersz w tabeli, w której hostname nie ma wartości null, co powoduje błąd. Możesz jawnie poprzedzić nazwę parametru nazwą funkcji, aby wymusić hostname rozwiązać do parametru

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

To działa. Ale dodanie prefiksu nazwy funkcji zazwyczaj jest denerwujące. Jeśli przyjmiesz konwencję przedrostków nazw parametrów i nazw zmiennych lokalnych, otrzymasz coś w stylu

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;

To również działa i wydaje się (moim zdaniem) bardziej przejrzyste niż dodawanie wyraźnych przedrostków nazw funkcji w całym miejscu.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. EBS 12.2.5 i nowsze:Niewspółosiowość przycisku strony logowania

  2. Data powrotu nie ma zwróconej godziny i minut

  3. jak przechowywać nazwę pliku przeglądania w bazie danych

  4. Wielokrotne wykorzystanie tego samego parametru w warunkach WHERE zapytania SQL do użycia w JDBC

  5. treść deklaracji opakowania