Slozene typy v PL/pgSQL
Pavel Stehule
stehule na kix.fsv.cvut.cz
Sobota Červenec 2 09:23:44 CEST 2005
Mozna uz jsem doma. Přecte te si muj posledni clanek na rootu. Je to prave
o tom. Ciste reseni je pro 8.1 EXECUTE INTO, v predchozich verzich musite
pro kazdy typ RECORDU napsat spec. prirazovaci prikaz
if param1=t1 THEN
v := ...
else
v := ...
Pavel
On Fri, 1 Jul 2005, [Windows-1250] Luká Vadinský wrote:
> Hezky den,
>
> dekuji vam za odpoved. Pokud si spustite na svem sql serveru nasledujici sekvenci prikazu, zjistite, co me trapi.
>
> CREATE TABLE table1
> (
> id serial NOT NULL,
> field1 varchar(10)
> );
> INSERT INTO table1 (field1) VALUES ('yes');
>
> CREATE OR REPLACE FUNCTION func1()
> RETURNS varchar AS
> $$
> DECLARE
> t varchar := 'table1';
> f varchar := 'field1';
> r record;
> v varchar;
> BEGIN
> select * into r from table1 where id = 1;
> v := r.field1;
> RETURN v;
> END;
> $$
> LANGUAGE 'plpgsql';
> SELECT func1();
>
> Toto vam vrati retezec 'yes'.
> Ted zkuste spustit nasledujici sekvenci, ktera pouze ve funkci nahradi vyraz 'v := r.field1;' za 'v := r.f;'.
>
> CREATE OR REPLACE FUNCTION func1()
> RETURNS varchar AS
> $$
> DECLARE
> t varchar := 'table1';
> f varchar := 'field1';
> r record;
> v varchar;
> BEGIN
> select * into r from table1 where id = 1;
> v := r.f;
> RETURN v;
> END;
> $$
> LANGUAGE 'plpgsql';
> SELECT func1();
>
> To by Vam melo napsat neco jako 'record "r" has no field "f"'. A to je prave to, co bych rad vedel. Zda a jestli je mozne, aby byly oba parametry promenne.
>
> Snad vas tim moc nezdrzuji, dekuji vam za vas cas.
>
> Lukas
>
>
Další informace o konferenci Test