PL/pgSQL - parametr funkce typu record
Jiri Borik
jiri.borik na volny.cz
Úterý Duben 15 04:50:36 CEST 2003
Prijemny den,
narazil jsem na problem, jak zavolat z funkce jinou funkci a pri tom
predat parametr typu record. Nejak se mi to nedari zapsat bez chyby (viz
prilozeny kod) a v dokumentaci jsem nevycetl vic nez: Parameters to a
function can be composite types (complete table rows).
Jak se to dela ?
Predem diky za radu.
Jirka Borik <jiri.borik na volny.cz>
------------------------------------------------------------------------
drop table tab_a;
DROP
create table tab_a (pk text primary key);
psql:test3.sql:2: NOTICE: CREATE TABLE/PRIMARY KEY will create implicit index 'tab_a_pkey' for table 'tab_a'
CREATE
------------------------------------------------------------------------
create function f1(tab_a) returns text as '
declare
t alias for $1;
begin
-- zkusime zmenit hodnotu, projevi se to v NEW ?
t.pk := ''c'';
return t.pk;
end;
' language 'plpgsql';
CREATE
------------------------------------------------------------------------
create function f2(tab_a) returns text as '
declare
t alias for $1;
begin
return f1(t);
end;
' language 'plpgsql';
CREATE
------------------------------------------------------------------------
drop function tr1();
DROP
create function tr1() returns opaque as '
declare
r text;
begin
r := f1(NEW);
raise notice ''ret: %/%'', r, NEW.pk;
return NEW;
end;
' language 'plpgsql';
CREATE
create trigger a_upd before update on tab_a for each row execute procedure tr1();
CREATE
------------------------------------------------------------------------
insert into tab_a values('a');
INSERT 657665 1
update tab_a set pk='b';
psql:test3.sql:37: ERROR: NEW used in non-rule query
select pk,f1(tab_a) from tab_a;
pk | f1
----+----
a | c
(1 row)
select pk,f2(tab_a) from tab_a;
psql:test3.sql:40: ERROR: Attribute 't' not found
------------------------------------------------------------------------
Další informace o konferenci Test