Re: Return Record
| От | Joe Conway |
|---|---|
| Тема | Re: Return Record |
| Дата | |
| Msg-id | 3EE20D51.9060804@joeconway.com обсуждение исходный текст |
| Ответ на | Return Record (Rory Campbell-Lange <rory@campbell-lange.net>) |
| Список | pgsql-general |
Rory Campbell-Lange wrote:
> I'm not clear on how to handle returning a record from a function.
> I have planned a function that is handed two strings and returns two
> integers. I need to return errors that satisfy the return type. At the
> moment my "RETURN 0;" lines result in "return type mismatch..." errors.
>
You can't return type "record" in the ways you were trying (RETURN (0,
0); and RETURN 0;). Also, since you were raising EXCEPTION instead of
NOTICE, the function would never return anyway. See below -- I think it
does what you want:
CREATE OR REPLACE FUNCTION fn_b1_login2(varchar, varchar)
RETURNS record AS'
DECLARE
email ALIAS for $1;
pass ALIAS for $2;
recone RECORD;
BEGIN
-- more extensive checking to be done in client program
IF email IS NULL THEN
RAISE NOTICE ''no email found at fn_e3_person_register'';
SELECT into recone 0,0;
RETURN recone;
END IF;
IF pass IS NULL THEN
RAISE NOTICE ''no pass found at fn_e3_person_register'';
SELECT into recone 0,0;
RETURN recone;
END IF;
--
SELECT INTO recone 1,2;
-- p.n_id as nid, b.n_id as bid
-- FROM
-- people p, boards b
-- WHERE
-- p.t_email = email
-- AND
-- p.t_password = pass
-- AND
-- p.n_id = b.n_creator
-- AND
-- b.n_type = 0;
IF NOT FOUND THEN
RAISE NOTICE ''no person board combination found at
fn_e3_person_register'';
SELECT into recone 0,0;
RETURN recone;
END IF;
RETURN recone;
END;
' LANGUAGE 'plpgsql';
regression=# select * from fn_b1_login2('a', null) as (pid int, bid int);
NOTICE: no pass found at fn_e3_person_register
pid | bid
-----+-----
0 | 0
(1 row)
regression=# select * from fn_b1_login2(null, 'b') as (pid int, bid int);
NOTICE: no email found at fn_e3_person_register
pid | bid
-----+-----
0 | 0
(1 row)
regression=# select * from fn_b1_login2('a', 'b') as (pid int, bid int);
pid | bid
-----+-----
1 | 2
(1 row)
HTH,
Joe
В списке pgsql-general по дате отправления: