Habe das Problem mit dem MERGE zwar gelöst, aber ich habe eine bessere Lösung für mein Problem gefunden. Und zwar unterstützt Oracle eine ganze Reihe an Funktionen in einem INSERT-Befehl (
Dokumentation für Oracle Version 9.2).
So in etwa sieht nun mein
Query aus:
SQL-Code:
INSERT FIRST
WHEN NOT EXISTS (
SELECT 1
FROM "
TdmUser"
WHERE "
Username" = :username
)
THEN
INTO "
TdmUser" ("
Username", "
Disabled")
VALUES (:username, 0)
INTO "
TdmUserProfileOptions" (
-- viele Spalten ;)
VALUES(
-- viele Spalten, die aus dem unteren SELECT stammen, wodurch
-- das Standardprofil erzeugt wird, welches man via GUI
-- natürlich auch bearbeiten kann
)
SELECT *
FROM "
TdmUserProfileOptions"
WHERE "
RefUsername" = '
:default-profile:';
Entsprechend ist die Anzahl der eingefügten Datensätze, wenn der Username vorhanden ist, gleich 0, oder bei "nicht-vorhanden-sein" gleich 2, da ja in zwei Tabellen Datensätze eingefügt wurden. Schön ist auch, dass man in x-beliebige Tabellen Daten einfügen und diese mit dem SELECT am Ende füttern kann.
Blöd ist aber, dass das SELECT am Schluss Pflich ist. Will man die INSERTs mit Daten aus der Anwendung füllen, so bräuchte man das SELECT gar nicht.
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)