Thread: pl/pgsql docs 37.4.3. Row Types -- how do I use this function?

pl/pgsql docs 37.4.3. Row Types -- how do I use this function?

From
"Lee Harr"
Date:
I am following along with the pl/pgsql docs here:
http://www.postgresql.org/docs/current/static/plpgsql-declarations.html

In section 37.4.3. Row Types I have altered the function slightly
(I finished the where ... clause) :


CREATE or REPLACE FUNCTION use_two_tables(tablename) RETURNS text AS '
DECLARE
    in_t ALIAS FOR $1;
    use_t table2name%ROWTYPE;
BEGIN
    SELECT * INTO use_t FROM table2name WHERE f1 = ''a'';
    RETURN in_t.f1 || use_t.f3 || in_t.f5 || use_t.f7;
END;
' LANGUAGE plpgsql;



Just before that, I created two tables:

CREATE TABLE tablename(
    f1 text,
    f2 text,
    f3 text,
    f4 text,
    f5 text,
    f6 text,
    f7 text
);
CREATE TABLE table2name(
    f1 text,
    f2 text,
    f3 text,
    f4 text,
    f5 text,
    f6 text,
    f7 text
);

and put in some data:

insert into tablename values ('a', 'bb', 'ccc', 'dddd', 'eee', 'ff', 'g');
insert into tablename values ('aa', 'bbb', 'cccc', 'ddd', 'eeee', 'fff',
'gg');
insert into table2name values ('aaaa', 'bbb', 'cc', 'd', 'ee', 'fff',
'gggg');
insert into table2name values ('a', 'bb', 'ccc', 'dddd', 'eeeee', 'ffffff',
'ggggggg');


Now, how do I call the function?

CREATE FUNCTION
# select use_two_tables(tablename);
ERROR:  column "tablename" does not exist
# select use_two_tables(f1);
ERROR:  column "f1" does not exist
# select use_two_tables(table2name);
ERROR:  column "table2name" does not exist

_________________________________________________________________
Check out the new MSN 9 Dial-up � fast & reliable Internet access with prime
features! http://join.msn.com/?pgmarket=en-us&page=dialup/home&ST=1


Re: pl/pgsql docs 37.4.3. Row Types -- how do I use this

From
"Joshua D. Drake"
Date:
Hello,

Unless your function parameter is an integer you must quote it... eq:

select use_two_tables('tablename');

Sincerely,


Joshua D. Drake


Lee Harr wrote:

> I am following along with the pl/pgsql docs here:
> http://www.postgresql.org/docs/current/static/plpgsql-declarations.html
>
> In section 37.4.3. Row Types I have altered the function slightly
> (I finished the where ... clause) :
>
>
> CREATE or REPLACE FUNCTION use_two_tables(tablename) RETURNS text AS '
> DECLARE
> in_t ALIAS FOR $1;
> use_t table2name%ROWTYPE;
> BEGIN
> SELECT * INTO use_t FROM table2name WHERE f1 = ''a'';
> RETURN in_t.f1 || use_t.f3 || in_t.f5 || use_t.f7;
> END;
> ' LANGUAGE plpgsql;
>
>
>
> Just before that, I created two tables:
>
> CREATE TABLE tablename(
> f1 text,
> f2 text,
> f3 text,
> f4 text,
> f5 text,
> f6 text,
> f7 text
> );
> CREATE TABLE table2name(
> f1 text,
> f2 text,
> f3 text,
> f4 text,
> f5 text,
> f6 text,
> f7 text
> );
>
> and put in some data:
>
> insert into tablename values ('a', 'bb', 'ccc', 'dddd', 'eee', 'ff',
> 'g');
> insert into tablename values ('aa', 'bbb', 'cccc', 'ddd', 'eeee',
> 'fff', 'gg');
> insert into table2name values ('aaaa', 'bbb', 'cc', 'd', 'ee', 'fff',
> 'gggg');
> insert into table2name values ('a', 'bb', 'ccc', 'dddd', 'eeeee',
> 'ffffff', 'ggggggg');
>
>
> Now, how do I call the function?
>
> CREATE FUNCTION
> # select use_two_tables(tablename);
> ERROR: column "tablename" does not exist
> # select use_two_tables(f1);
> ERROR: column "f1" does not exist
> # select use_two_tables(table2name);
> ERROR: column "table2name" does not exist
>
> _________________________________________________________________
> Check out the new MSN 9 Dial-up — fast & reliable Internet access with
> prime features! http://join.msn.com/?pgmarket=en-us&page=dialup/home&ST=1
>
>
> ---------------------------(end of broadcast)---------------------------
> TIP 4: Don't 'kill -9' the postmaster



--
Command Prompt, Inc., home of Mammoth PostgreSQL - S/ODBC and S/JDBC
Postgresql support, programming shared hosting and dedicated hosting.
+1-503-667-4564 - jd@commandprompt.com - http://www.commandprompt.com
PostgreSQL Replicator -- production quality replication for PostgreSQL


Re: pl/pgsql docs 37.4.3. Row Types -- how do I use this function?

From
Tom Lane
Date:
"Lee Harr" <missive@hotmail.com> writes:
> I am following along with the pl/pgsql docs here:
> http://www.postgresql.org/docs/current/static/plpgsql-declarations.html

> Now, how do I call the function?

I believe you want

select use_two_tables(tablename.*) from tablename;

"foo.*" is the locution for referring to the whole-row value coming from
table foo in a select.

            regards, tom lane

Re: pl/pgsql docs 37.4.3. Row Types -- how do I use this function?

From
"Lee Harr"
Date:
>>I am following along with the pl/pgsql docs here:
>>http://www.postgresql.org/docs/current/static/plpgsql-declarations.html
>
>>Now, how do I call the function?
>
>I believe you want
>
>select use_two_tables(tablename.*) from tablename;
>
>"foo.*" is the locution for referring to the whole-row value coming from
>table foo in a select.
>


A ha!  That's the one!
Here is a complete working example for those playing along at home...


CREATE TABLE ta1(
    f1 text,
    f2 text,
    f3 text,
    f4 text,
    f5 text,
    f6 text,
    f7 text
);
CREATE TABLE ta2(
    f1 text,
    f2 text,
    f3 text,
    f4 text,
    f5 text,
    f6 text,
    f7 text
);
insert into ta1 values ('a', 'b', 'c', 'd', 'e', 'f', 'g');
insert into ta1 values ('aa', 'bb', 'cc', 'dd', 'ee', 'ff', 'gg');
insert into ta1 values ('aaa', 'bbb', 'ccc', 'ddd', 'eee', 'fff', 'ggg');
insert into ta2 values ('z', 'y', 'x', 'w', 'v', 'u', 't');
insert into ta2 values ('zz', 'yy', 'xx', 'ww', 'vv', 'uu', 'tt');

CREATE or REPLACE FUNCTION use_two_tables(ta1) RETURNS text AS '
DECLARE
    in_t ALIAS FOR $1;
    use_t ta2%ROWTYPE;
BEGIN
    SELECT * INTO use_t FROM ta2 WHERE f1 = ''z'';
    RETURN in_t.f1 || use_t.f3 || in_t.f5 || use_t.f7;
END;
' LANGUAGE plpgsql;



# select use_two_tables(ta1.*) from ta1;
use_two_tables
----------------
axet
aaxeet
aaaxeeet
(3 rows)


Thank you for your help.

_________________________________________________________________
Add photos to your messages with MSN 8. Get 2 months FREE*.
http://join.msn.com/?page=features/featuredemail