SQLowa funkcja zwracająca tekst

0

Czy ktoś mógłby rzucić okiem na poniższą funkcje i powiedzieć mi dlaczego one nie działa? Cały czas wywala mi błąd w 7 linii, a wg mnie jest tam wszystko ok.

CREATE OR REPLACE FUNCTION daty_filmu(t INTEGER) RETURNS TEXT AS $$
DECLARE
 r RECORD;
 daty TEXT;
BEGIN
 daty='''';
 FOR r IN SELECT * FROM seanse WHERE film=t LOOP
 daty=daty || r.data_seansu || char(10);
 END LOOP
 RETURN daty;
END;
$$ LANGUAGE 'plpgsql';
0
  1. zamień datę (data_senasu) na varchar
  2. co to jest char(10)?
0

char(10) to znak nowej linii, ale to nie istotne. Czyli rozumiem że do zmiennej typu tekstowego nie mogę dodawać zmiennej typu DATA?

Mam problem z jeszcze jedną funkcją. Błąd jest w 11 linii, ale nie rozumiem dlaczego. Ten SELECT zawsze zwraca mi jednoatrrybutową i jednowierszową tabelę, więc dlaczego ma problem z przypisaniem?

CREATE OR REPLACE FUNCTION czas_calkowity_reklam (IDseanu_arg INTEGER) RETURNS INTEGER AS $$
 DECLARE
  czas_trwania_reklam INTEGER;
  r RECORD;
  ID_reklamy INTEGER;
  czas_reklamy INTEGER;
 
 BEGIN
  czas_trwania_reklam:=0;
  FOR r IN SELECT * FROM reklamy_seanse WHERE IDseansu=IDseansu_arg LOOP
  	ID_reklamy=r.IDreklamy;
  	czas_reklamy=SELECT czas_trwania FROM reklamy WHERE IDreklamy=ID_reklamy;
  	czas_trwania_reklam=czas_trwania_reklam+czas_reklamy;
  END LOOP
  RETURN czas_trwania_reklam;
 END;
 
$$ LANGUAGE 'plpgsql';
0

JAKI BŁĄD!?!?

0

ERROR: syntax error at or near "SELECT"
Gdzie: SQL statement in PL/PgSQL function "czac_calkowity_reklam" near line 11

Czyli coś mu nie gra przy tym SELECT w 11 linii, ale nie mam pojęcia co.

0

Ok, problem rozwiazany. Nalezy uzyć konstrukcji SELECT INTO nazwa_zmiennej nazwa_atrybutu FROM nazwa_tabeli WHERE...

0
tomekz1991 napisał(a):

char(10) to znak nowej linii, ale to nie istotne. Czyli rozumiem że do zmiennej typu tekstowego nie mogę dodawać zmiennej typu DATA?

Mam problem z jeszcze jedną funkcją. Błąd jest w 11 linii, ale nie rozumiem dlaczego. Ten SELECT zawsze zwraca mi jednoatrrybutową i jednowierszową tabelę, więc dlaczego ma problem z przypisaniem?

CREATE OR REPLACE FUNCTION czas_calkowity_reklam (IDseanu_arg INTEGER) RETURNS INTEGER AS $$
 DECLARE
  czas_trwania_reklam INTEGER;
  r RECORD;
  ID_reklamy INTEGER;
  czas_reklamy INTEGER;
 
 BEGIN
  czas_trwania_reklam:=0;
  FOR r IN SELECT * FROM reklamy_seanse WHERE IDseansu=IDseansu_arg LOOP
  	ID_reklamy=r.IDreklamy;
  	czas_reklamy=SELECT czas_trwania FROM reklamy WHERE IDreklamy=ID_reklamy;
  	czas_trwania_reklam=czas_trwania_reklam+czas_reklamy;
  END LOOP
  RETURN czas_trwania_reklam;
 END;
 
$$ LANGUAGE 'plpgsql';

Nie znam się plpgsql, ale czy w nim nie można zapisać tego łatwiej:

SELECT SUM(czas_trwania)
FROM reklamy r JOIN reklamy_seanse rs ON r.IDreklamy = rs.IDreklamy
WHERE rs.IDseansu = IDseansu_arg

?

1 użytkowników online, w tym zalogowanych: 0, gości: 1