Ich glaube zwar nicht, dass es an der Funktion selber liegt, da sie auf dem alten Server (Version 8.2.7) einwandfrei lief, aber ok; hier ist sie:
CREATE OR REPLACE FUNCTION a.user__entry(data_entries text[], pk_entry text[], fk1 text[], fk2 text[])
RETURNS boolean AS
$BODY$
DECLARE
no_PK_constraint boolean := FALSE;
n_PK integer := (select array_upper (PK_entry,1));
PK integer := (select get_primarykey ('user_', PK_entry[1:n_PK]));
n_FK1 integer := (select array_upper(FK1, 1));
FK1 integer := (select get_primarykey ('location', FK1[1:n_FK1]));
n_FK2 integer := (select array_upper(FK2, 1));
FK2 integer := (select get_primarykey ('admindata', FK2[1:n_FK2]));
insert_into varchar;
BEGIN
IF (PK=0) then
no_PK_constraint := TRUE;
perform primarykey_entry('user_', PK_entry[1:n_PK]);
PK:=(select get_primarykey ('user_', PK_entry[1:n_PK]));
insert_into := 'insert into user_(u_usertype, u_loginname, u_displayname, u_fullname, u_firstname, u_lastname, u_organization, u_adress_streetname, u_adress_city, u_adress_stateprov, u_adress_country, u_adress_postalcode, u_adress_othertext, u_email, u_picturefilename, u_imagetype, u_pager, u_fax, u_phone, u_ref_locationoid, u_certificate, u_pk, u_fk_location, u_fk_admindata) values (';
FOR i IN 1..21 LOOP
IF (data_entries[i]='default' or data_entries[i]='' or data_entries[i]='null' or data_entries[i] is null) then
insert_into=insert_into||'default, '; elseif (data_entries[i]<>'default' or data_entries[i]<>'' or data_entries[i]<>'null' or data_entries[i]<>null) then
insert_into:=insert_into||''''||data_entries[i]||''''||', ';
END IF;
END LOOP;
insert_into := insert_into||''''||PK||'''';
IF (FK1 IS NOT NULL) THEN insert_into := insert_into||', '||''''||FK1||'''';
ELSE insert_into := insert_into||', DEFAULT';
END IF;
IF (FK2 IS NOT NULL) THEN insert_into := insert_into||', '||''''||FK2||'''';
ELSE insert_into := insert_into||', DEFAULT';
END IF;
insert_into := insert_into||');';
EXECUTE insert_into;
END IF;
RETURN no_PK_constraint;
END;
$BODY$
LANGUAGE plpgsql VOLATILE SECURITY DEFINER
COST 100;
ALTER FUNCTION a.user__entry(text[], text[], text[], text[]) OWNER TO postgres;
alle Funktionen die in dieser Funktion aufgerufen werden existieren und sind ebenfalls in plpsql geschrieben.
PS: sry, aber ich habe mich ja schon vorher als Newbie “geoutet”