Receive a record not a tuple - plpgsql

From: Flávio Brito <flavio(at)gral(dot)org(dot)br>
To: pgsql-admin(at)postgresql(dot)org
Subject: Receive a record not a tuple - plpgsql
Date: 2005-11-16 20:21:31
Message-ID: 1132172491.26344.13.camel@localhost
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-admin

Dear Friends

How can I call a function into a function? My problem is: I'm trying to
calculate a tax(inss) over a employer salary. I created a function
called inss that do it correctly, but when I create another one to show
more attributes (inss is not a attribute, it is calculate over a salary)
I receive a record (like {1,Mary,32.45} not a tuple. How can I solve it?

CREATE TABLE emp
(
cod numeric
name text NOT NULL,
last_date timestamp,
last_user text,
salary numeric,
CONSTRAINT pkey PRIMARY KEY (cod)
)

CREATE FUNCTION inss() RETURNS numeric AS '
SELECT salary*0.11 FROM emp;
'LANGUAGE 'sql';
---------------------------------------------------------------------------------------------
It is OK
---------------------------------------------------------------------------------------------
CREATE OR REPLACE FUNCTION mostra_inss() RETURNS setof record AS '

select name, inss(), salary from emp;

'LANGUAGE 'sql';
---------------------------------------------------------------------------------------------
--- Only for test --- DROP FUNCTION show_inss();
--- Only for test --- select inss();
---------------------------------------------------------------------------------------------
--- Another Test - Not OK

CREATE OR REPLACE FUNCTION show_inss() RETURNS VARCHAR AS '
DECLARE
inss float;
BEGIN
SELECT INTO inss inss() FROM emp;
RETURN inss;
END;
' LANGUAGE 'plpgsql';
---------------------------------------------------------------------------------------------
--- Another Test (NOT OK)
---------------------------------------------------------------------------------------------
create or replace function test_inss() returns record as '
DECLARE
d record;
BEGIN
for d in select name,salary,inss() from emp
loop
end loop;
RETURN;
END;
' language 'plpgsql';

select test_inss();

Responses

Browse pgsql-admin by date

  From Date Subject
Next Message Kevin Grittner 2005-11-16 20:24:43 Re: ERROR: could not read block
Previous Message Bruno Wolff III 2005-11-16 19:35:24 Re: Reg: Changing Column type