store procedure with PostgreSQL

4 отговора 691 прегледа
#1

store procedure with PostgreSQL

imam slednoto pitane
kak moej da se napishe suhraneta procedura v Postgre koqto da vurne mnojestwo ot zapisi pri uzlovie 4e se izpolzwa za ezik PL/pgSQL.
samo 4rez SQL nqma problem, za towa no ako iskam da vkaram nqkakwi uslownosti vutre v prozedurata mi trqbwa PL/pgSQL i v v sledstwie na tezi uslownosti da naprawq Select koito da mi vru6ta mnojeswo zapisi.

Отговор
в отговор на noname #2

Re: store procedure with PostgreSQL

ами ето една статиика

[линк]

Отговор
в отговор на phpGuru #3

Re: store procedure with PostgreSQL

mersi,
do tuk dobre, vru6ta mu jelaniqt resultat, no iskam da sustawq dinami4na SQL zaqwska, ili po to4no dinami4na Where clause, qwno nqkude butkam tuj kato postoqnno mi dawa gre6ka:

CREATE OR REPLACE FUNCTION public.getrows(text)
RETURNS SETOF record AS
'
declare
r record;
begin
for r in select * from categories loop
return next r;
end loop;
return;
end

'
LANGUAGE 'plpgsql' VOLATILE;

kak bi se izmenila tazi funkciq, taka 4e da ima vuzmojnost da se dobawi dinimi4na Where clause
probwah razni varianti no sled kato izvikam funkcioqta mi dawa gre6ka

Отговор
в отговор на noname #4

Re: store procedure with PostgreSQL

ами в самата статия има такъв пример (твоя като че ли е от там взиман, но не е взет 100%, ама то и той там е сбъркан ... ;-)))

create or replace function GetRows(text) returns setof record as
'
declare
r record;
begin
for r in EXECUTE ''select * from '' || $1 loop
return next r;
end loop;
return;
end
'
language 'plpgsql';

в случая каквото му зададеш като параметър на функцията ще се залепи директно на заявката, т.е. ти може да си правиш каквато искаш заявка като стринг и после я изпълняваш с EXECUTE


а грешката вероятно която ти дава е защото когато се ползва тип record трябва при викането на процедурата да се напише типа, който се очаква (от примера там)
select * from GetRows(Department) as dept(deptid int, deptname text);

ако искаш да не трябва такъв селект, вместо record трябва да ползваш или готов тип предварително дефиниран като това, което очаква (там пак има примери) или като setof tablename за конкретен вид таблица ето пример

таблицата се казва nummm

create or replace function GetRows() returns setof nummm as
'
declare
r nummm%ROWTYPE;
begin
for r in select * from nummm loop
return next r;
end loop;
return;
end
'
language 'plpgsql';

Отговор
в отговор на phpGuru #5

Re: store procedure with PostgreSQL

mersi
vsi4ko e OK ve4e, to4no kakto mi trqbwashe
eto takiwa diskusii sa polzezni v koito nqma zajdane mejdu u4astnicite, a samo konkretni vuprosi i otgowori

mersi o6te vednuj

Отговор