Slozene typy v PL/pgSQL

Lukáš Vadinský lukin na pef.czu.cz
Pátek Červenec 1 20:12:12 CEST 2005


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