1

Temat: Jak uruchomić procedurę?

Mam taką procedurę,
CREATE FUNCTION p2() Returns numeric AS'
BEGIN
select * from osoby ;
END; '
LANGUAGE 'plpgsql'

Zapytanie wykonało się.

Jak robię select p2; to mam taki błąd
BŁĄD: query has no destination for result data
Stan SQL:42601
Wskazówka:If you want to discard the results of a SELECT, use PERFORM instead.
Kontekst:PL/pgSQL function "p2" line 2 at SQL statement

przy EXECUTE p2; prepared statement "p2" does not exist

Co zrobić aby tą procedurę uruchomić. Jest to moja pierwsza procedura:)

2

Odp: Jak uruchomić procedurę?

A co ta procedura ma robić? Bo piszesz 'returns numeric' a w kodzie masz 'select * form ...'

3

Odp: Jak uruchomić procedurę?

Procedura ma wyświetlić to co się znajduje w tabeli osoby.

No właśnie nie wiem, jaki typ muszę podać " returns typ"?
A kolumny w tabeli osoby mam różnego typu.:)
Jak mam brak typu, to błąd składni?

4

Odp: Jak uruchomić procedurę?

Tabela osoby wygląda tak:
CREATE TABLE osoby
(
  idosoby numeric(10) NOT NULL,
  iddzialu numeric(10),
  nazwisko character varying(15),
  imie character varying(15),
  rokurodz numeric(4),
  wzrost numeric(3,2),
  idszefa numeric(10),
  CONSTRAINT osoby_pkey PRIMARY KEY (idosoby)
)

5

Odp: Jak uruchomić procedurę?

Rozwiązań pewnie będzie wiele np

create function f_test() returns setof test as '
declare r test%rowtype; 
begin 
    for r in select * from test loop 
      return next r; 
    end loop; 
end;
'
language plpgsql;

i uruchamiasz poleceniem

 
select * from f_test();

Albo np

create function f_test2() returns varchar as $$
declare r test%rowtype; 
begin 
   for r in select * from test loop 
    raise info 'wartosci %',r.i;  --i tu wymieniasz to co chcesz wypisac
   end loop; 
   return 'Done'; 
end; 
$$
language plpgsql;

i wywołujesz

select f_test2();

Pamiętaj, że plpgsql nie został stworzony do tego aby wypisywać dane na ekran w związku z czym nie ma tu specjalnej koemendy wypisywania czegoś na ekran (cos jak dbms_output w oraclu)

6

Odp: Jak uruchomić procedurę?

Aha i byl jeszcze kiedyś dodatek to postgresa 'ora coś tam' się nazywał. Który dodawał funkcje z oracla (m.in. chyba była tam funkcja do ładnego wypisywania komunikatów). Jak sobie przypomnę nazwę to podrzucę na forum.

7

Odp: Jak uruchomić procedurę?

Dziękuje wykonało się bez problemu. smile