Ich nutze die SP um einen neuen Datensatz in meiner Datenbank anzulegen.
Normalerweise waren das nur zwei drei Tabellen, bei einem neuen Projekt benötige ich aber insgesamt ca. 50 Tabellen, auf welche die daten verteilt werden.
Die Main-Table beinhaltet dabei die entsprechenden Fremdschlüssel zu denabdere Tabellen. Wenn ich nun einen kompletten Datensatz einfügen will, benötige ich ja logischer Weise zuerst alle Fremdschlüssel. Ich muss also für jede Tabelle testen, ob der Wert schon vorhanden ist, wenn ja, benötige ich dessen Primärschlüssel, wenn nicht, muss ich den Wert erstellen und den neuen Primäschlüssel ebenfalls zwischenspeichern.
Wenn ich dann alle Primärschlüssel hab, kann ich ja schließlich damit die Main-Table füttern.
Nun stelt sich aber die Frage, wie man dies realisieren kann, logisch ist es möglich, für alle tabellen die Abfrage inzuschreiben und den Wert zwischenzuspeichern, ungefähr so:
Code: Alles auswählen
begin
IF (NOT EXISTS (SELECT id FROM filme
WHERE (filme.film = :XFILM) AND (filme.idmag1 = :XMAG1)))
then
begin
INSERT INTO filme
(film, idmag1, idmag2, filmid, bemerkungen)
VALUES
(:XFILM, :XMAG1, :XMAG2, :XFILMID, :XBEMERKUNGEN);
/*dann enthält ja der generator die entsprechende ID, auf welche ich zugreifen kann: gen_id(gen_filme_id, 0);*/
end
else
begin
/*ansonsten Abfrage der ID*/
SELECT Id FROM filme
WHERE (filme.film = :XFILM) AND (filme.idmag1 = :XMAG1)
INTO :ID;
end
suspend;
end
Weshalb ich es gerne etwas Schachteln würde, nur dafür fehlt mir gerade der Ansatz.
1. Eine Storedproc für die Unterabfrage - nur wie übergeb ich der als Parameter den entsprechenden Tabellennamen?
2. was fast besser wäre, eine unterfunction in der StoredProc, aber selbes Problem, wie erstellt man sie überhaupt und wie kann ich die Tabelle übergeben?
3. UDF würde sich wahrscheinlich eignen

4. Alles manuell für jede Tabelle so wie oben?
5. Andere Methode?