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