reuse RECORD in function 'select into'?
От | Rory Campbell-Lange |
---|---|
Тема | reuse RECORD in function 'select into'? |
Дата | |
Msg-id | 20030527154249.GA2234@campbell-lange.net обсуждение исходный текст |
Ответы |
Re: reuse RECORD in function 'select into'?
|
Список | pgsql-novice |
In the function below I do four "select into" actions to check if particular values already exist in any one of several tables. Can I reuse the RECORD for each 'select into'? The RECORDs are presumably empty after each select into, as the function needs FOUND to be false to continue. Also, should I "RETURN 0" after a RAISE EXCEPTION? Thanks Rory CREATE OR REPLACE FUNCTION fn_c1_create_board ( integer, integer, varchar, varchar, varchar) RETURNS INTEGER AS ' DECLARE creator ALIAS for $1; typer ALIAS for $2; name ALIAS for $3; email ALIAS for $4; description ALIAS for $5; recone RECORD; rectwo RECORD; recthree RECORD; recfour RECORD; BEGIN -- more extensive checking to be done in client program IF creator IS NULL THEN RAISE EXCEPTION ''no creator found at fn_c1_create_board''; END IF; IF typer IS NULL THEN RAISE EXCEPTION ''no typer found at fn_c1_create_board''; END IF; IF name IS NULL THEN RAISE EXCEPTION ''no name found at fn_c1_create_board''; END IF; IF email IS NULL THEN RAISE EXCEPTION ''no email found at fn_c1_create_board''; END IF; IF description IS NULL THEN RAISE EXCEPTION ''no description found at fn_c1_create_board''; END IF; -- find all in people and boards who have a name like this one. -- if found, abort creation SELECT into recone n_id FROM boards WHERE t_name ~* name; IF FOUND THEN RAISE EXCEPTION ''board with same name found at fn_c1_create_board''; END IF; SELECT into rectwo n_id FROM people WHERE t_nickname ~* name; IF FOUND THEN RAISE EXCEPTION ''person with same nickname found at fn_c1_create_board''; END IF; SELECT into recthree n_id FROM people WHERE t_email ~* email; IF FOUND THEN RAISE EXCEPTION ''person with same email found at fn_c1_create_board''; END IF; SELECT into recfour n_id FROM boards WHERE t_email ~* email; IF FOUND THEN RAISE EXCEPTION ''board with same email found at fn_c1_create_board''; END IF; -- ok, if we have got here, its ok to make the board! INSERT INTO boards (n_creator, n_type, t_name, t_email, t_description) VALUES (creator, typer, name, email, description); RETURN 1; END;' LANGUAGE plpgsql; -- Rory Campbell-Lange <rory@campbell-lange.net> <www.campbell-lange.net>
В списке pgsql-novice по дате отправления: