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