Wpis z mikrobloga

#plsql #sql #oracle #naukaprogramowania

Witam, mam problem z zadaniem

Napisz program za pomocą funkcji, który pokaże pracowników w danym zespole(jako argument podaj miejsce pracy pracownika)


dla sprawdzenia czy poprawnie napisałem skąd ma pobierać napisałem:

SELECT z.IDZESP, z.nazwisko, b.adres FROM pracownicy z join zespoly b on z.idzesp=b.idzesp where z.idzesp=20

i wyświetliło wszystko dobrze

ale kiedy zrobiłem funkcję:

create or replace FUNCTION pracownicywzespole (idzespolu IN number)

RETURN number IS

nazwpracownika varchar (99);


BEGIN

SELECT z.IDZESP, z.nazwisko, b.adres into nazwpracownika FROM PRACOWNICY z join ZESPOLY b on z.idzesp=b.idzesp where z.idzesp=idzespolu;


RETURN (nazw_pracownika);

END;


wyskoczył mi błąd:

Error(6,1): PL/SQL: SQL Statement ignored

Error(6,61): PL/SQL: ORA-00947: not enough values


co robię źle?
  • 3
  • Odpowiedz
@ugotowany_kamien: Błąd mówi o tym, że próbujesz zapisać wartości trzech atrybutów do jednej zmiennej. Ale to nie jedyny problem tutaj, bo ma ona typ varchar, a Ty próbujesz zwrócić ją z funkcji, która ma zwracać number. Do tego przy select into (po poprawieniu pierwszego problemu) może zostać rzucony wyjątek, jeśli zapytanie zwróci 0 lub więcej niż jedną krotkę.
  • Odpowiedz
@ugotowany_kamien:
Nie wiem jaki cel jest tej funkcji?
Jej działanie ma polegać na tym iż podasz jej identyfikator zespołu ? i co masz dostać w wyniku jej działania? Kilka wierszy ?
Funkcja może przyjąć generalnie jedną wartość, która może ew być tablicą. Nie ma możliwości zwrócenia za pomocą funkcji kilku wierszy.
Zapytanie zadziałało, ale w przypadku funkcji jedyną możliwością jest zwrócenie wyniku wielowierszowego na standardowe wyjście, ale to wtedy nie ma
  • Odpowiedz