Toon posts:

[SQL] In een trigger een X aantal records kopieren

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik zou graag willen weten of het volgende toch op 1 of andere manier mogelijk is.

Ik wil wanneer er in de tabel BESTELBOEKAFDRUKKEN een record geinsert wordt, er een aantal records uit de tabel BESTELBOEKARTIKELGROEPEN gekopieerd worden naar de tabel BESTELBOEKARTIKELGROEPAFDRUKKEN.

Nu heb ik het volgende geprobeerd:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
CREATE TRIGGER BESTELBOEKAFDRUKKEN_AI0 FOR BESTELBOEKAFDRUKKEN
ACTIVE AFTER INSERT POSITION 0
AS
begin
  /* Trigger text */
  INSERT INTO BESTELBOEKARTIKELGROEPAFDRUKKEN
    (BESTELBOEKAFDRUKID, ARTIKELGROEPID, ARTIKELGROEP, POSITIE,
     STARTOPNIEUWEPAGINA, EXTRALEGEPAGINAS)
  VALUES
    (SELECT NEW.BESTELBOEKAFDRUKID, BA.ARTIKELGROEPID, AG.ARTIKELGROEP, BA.POSITIE,
            BA.STARTOPNIEUWEPAGINA, BA.EXTRALEGEPAGINAS
     FROM   BESTELBOEKARTIKELGROEPEN BA, ARTIKELGROEPEN AG
     WHERE  BA.BESTELBOEKID = NEW.BESTELBOEKID
       AND  BA.ARTIKELGROEPID = AG.ARTIKELGROEPID);
end


Alleen dit gaat niet werken. Maar is het toch mogelijk om dit in de database zelf te regelen? (Ik maak gebruik van Interbase 6).

Mijn programma heb ik gemaakt in Delphi. Hierin is het zoiezo eenvoudig te doen. Maar het liefst heb ik dit allemaal geintegreed in de database.

  • whoami
  • Registratie: December 2000
  • Laatst online: 00:40
Waarom gaat dat niet werken?

Oh, ik zie het al, je INSERT syntax is verkeerd.

Schrijf je INSERT eens zo:
code:
1
2
3
INSERT INTO tabel
(veld, veld, veld, veld)
SELECT veld, veld, veld FROM ...


Zonder het VALUES keyword, en zonder de haakjes dus.

https://fgheysels.github.io/


Verwijderd

Topicstarter
Whoami,

Bedankt het werkt inderdaad zo. Maar ik vind het een beetje vreemd. Waarom mag je hier geen haakjes en values gebruiken? Zo heb ik het tenmiste altijd geleerd en zo staat het ook in de boeken. Daarom is dit wel het laatste waar ik aan zou denken wat fout zou kunnen zijn. Ik dacht dat het niet kon werken omdat ik een select zou uitvoeren die meer dan 1 record terug geeft.

  • whoami
  • Registratie: December 2000
  • Laatst online: 00:40
Als je zelf je waarden opgeeft, dan moet je het values keyword en de haakjes gebruiken.
Als je waarden insert die het resultaat zijn van een SELECT statement, dan mag je die VALUES en die haakjes er niet zetten.

https://fgheysels.github.io/


Verwijderd

Topicstarter
Bedankt, dat wist ik niet. Weer wat nieuws geleerd.