könnte mir mal jemand bei der syntax helfen?

Ich habe eine Importtabelle die eine Copyfunktion antriggert,
ich kopiere damit aus einer csv Tabelle in 3 DB tabellen:
1 Contact
2 Company (ID Verweis auf Contact)
3 Userdef (ID Verweis auf Contact)

ich habe is zufür mit Contact und Company versucht und funktioniert prima, nun will ich diese Funktion auf eine Tabbelle (Userdef) erweiter und weis jetzt nicht wie ich das machen kann. Wie muss ich die Userdeftabelle da einbinden?

Vielen Dank

Gruss
Frank

begin 
insert into company (company) 
select NEW.company
where not exists (select company from company where company=NEW.company)
insert into userdef (userdef_name)
select NEW.userdef
where not exists (select userdef_name from userdef where userdef_name=NEW.userdef);
insert into contact (Title1ID, Title2ID, name_last, name_first1, name_first2, 
Address_1, Address_2, City, State, Country, Zip, 
birthdate, Tel_Business, Tel_Private, Tel_Other, Mobile_Business, Mobile_Private, Mobile_Other, 
Fax_Business, Fax_Private, URL, Email_Business, Email_Private, 
ContactTypeID, ContactReference, invite_print, invite_email, company_id, userdefcolid) 
select NEW.Title1ID, NEW.Title2ID, NEW.name_last, NEW.name_first1, NEW.name_first2, 
NEW.Address_1, NEW.Address_2, NEW.City, NEW.State, NEW.Country, NEW.Zip, 
NEW.birthdate, NEW.Tel_Business, NEW.Tel_Private, NEW.Tel_Other, NEW.Mobile_Business, NEW.Mobile_Private, NEW.Mobile_Other, 
NEW.Fax_Business, NEW.Fax_Private, NEW.URL, NEW.Email_Business, NEW.Email_Private, 
NEW.ContactTypeID, NEW.ContactReference, NEW.invite_print, NEW.invite_email,
company_id from company where company=NEW.company,
userdef_id from userdef where userdef_name=NEW.userdef; 
return NEW; end;

Was genau ist Dein Problem? Es ist etwas mühsehlig, aus einem Fetzen Code Deine Gedanken und die dabei entstehenden Probleme zu extrahieren. Falls es etwas mit automatisch vergebenen ID’s aus Sequencen zu tun hat, könnte currval() für Dich nützlich sein. Das zumindest konnt ich grad im Kaffeesatz meines Morgenkaffees lesen.

Andreas

Kaffee trinken ist ungesund! :slight_smile:

Die ursprümgliche Funktion holt sich alle Informationen aus einer Tabelle (csv) und kopiert diese in zwei DB Tabelle:

die csv Tabelle hat folgende Spalten:
name_last, mame_first1,…,company_name, …

die contact DB Tabelle:
name_last, mame_first1,…,company_id, …

die company DB Tabelle:
company,…,company_id, …

Die Funktion lautet:
hole alle Daten aus der csv Tabelle und kopiere sie in contact und company und stelle eine Realtion her:
(contact.company_id, company.company_id)(company.company_id, company.company)

Das heißt, nach dem Kopiervogang hab ich aus der csv Tabelle

z.B.
name_last| mame_first1 |,…,|company_name, …
Hirsch | Harry |,…,|ichAG

folgendes gemacht:

contact Tabelle:
name_last| mame_first1|,…,|company_id| …
Hirsch | Harry |,…,|1

company Tabelle:
company| company_id, …
ichAG | 1

Und das funktioniert sehr gut, hier du Funktion:

begin 
insert into company (company) 
select NEW.company where not exists (select company from company where company=NEW.company); 
insert into contact (Title1ID, Title2ID, name_last, name_first1, name_first2, 
                Address_1, Address_2, City, State, Country, Zip, 
                birthdate, Tel_Business, Tel_Private, Tel_Other, Mobile_Business, Mobile_Private, Mobile_Other, 
                Fax_Business, Fax_Private, URL, Email_Business, Email_Private, 
                UserdefColID, ContactTypeID, ContactReference, invite_print, invite_email, company_id) 
select NEW.Title1ID, NEW.Title2ID, NEW.name_last, NEW.name_first1, NEW.name_first2, 
                NEW.Address_1, NEW.Address_2, NEW.City, NEW.State, NEW.Country, NEW.Zip, 
                NEW.birthdate, NEW.Tel_Business, NEW.Tel_Private, NEW.Tel_Other, NEW.Mobile_Business, NEW.Mobile_Private, NEW.Mobile_Other, 
                NEW.Fax_Business, NEW.Fax_Private, NEW.URL, NEW.Email_Business, NEW.Email_Private, 
                NEW.UserdefColID, NEW.ContactTypeID, NEW.ContactReference, NEW.invite_print, NEW.invite_email, 
                company_id from company where company=NEW.company; 
return NEW; 
end;

Nun möchte ich das ganze mit einer weiteren DB Tabelle erweitern:

DB Tabelle userdef:
userdef_id, userdef_name

das heißt, aus meiner csv Tabelle habe ich ne Spalte wo userdef_name steht und diese will ich in BD Tabelle contact und usedef verknüpfen, wie ich es mit company gemacht habe.

Hoffe das war ausreichend, vielen Dank

Frank

Anscheinend hast du uns noch nicht mitgeteilt, wo genau nun dein Problem liegt.

Doch, hab ich eigentlich:

Ich habe eine Copyfunktion die aus einer csv tabelle in zwei PG Tabellen kopiert mit diesen Relationen:

(contact.company_id, company.company_id)(company.company_id, company.company)

und dieses möchte ich ume eine weitere Tabelle erweitern und weiss nicht wie.

(contact.userdef_id, userdef.userdef_id)(userdef.userdef_id, userdef.userdef_name)

Die Contact Tabelle hat dann also zwei ID’s(company_id, userdef_id) die auf zwei weiteren tabellen zeigen.

Und die copierfunktion soll veranlassen, dass die Realtion passt. Wie gesagt, mit einer Tabelle geht das schon nur ein weitere hinzufügen füllt mit schwer.

Danke
frank

Man nehme einen Datensatz aus der CSV-Datei. Den einen Teil nimmt man und schaut, ob dieser schon in Tabelle A ist. Falls ja, merkt man sich die ID von A. Falls nein, fügt man den Teil in Tabelle A ein und merkt sich die ID. Nun wissen schon den einen Teil. Dasselbe macht man für den anderen Teil. Nun wissen wir beide ID’s, die wir einfach in die dritte Tabelle einfügen.

Hab ich das so richtig verstanden? Falls ja, hast Du ja nun schon einen Fahrplan…

Andreas

ich habs, danke

Na schau an, fein. Dabei hast Du sicherlich auch ganz nebenbei eine Menge gelernt.

Andreas