2016-05-25 10 views
0

Ich bin sehr, sehr sehr neu zu PL/SQL so entschuldigen Sie meine Unwissenheit zu diesem Thema, aber ich würde mich über Ihre Hilfe freuen!PL/SQL Before Trigger - Vererben Spalte aus anderen Tabelle

Ich habe diese 2 Tabellen, sagen wir, RATINGS und SPIELE.

Angenommen, ich möchte einen Wert aus der RATINGS-Tabelle erben und ihn automatisch in die GAME-Tabelle einfügen, abhängig von der GAMERATING-Funktion (erbt sie von der RATINGS-TABELLE).

auf dem Spieltisch haben wir: (GameID, GAMEPRICE, GAMENAME, GAMERATING, GAMEAGES, publisherID)

Und auf dem Tisch BEWERTUNGEN haben wir: (RATINGID, RATINGCODE, RATINGAGES)

Wenn ich einfügen die folgenden Werte in GAME: (1,50, 'Lost', 'M') Ich möchte, dass es automatisch die GAMEAGES aus der Tabelle RATINGS mit dem GAMERATING als Basis für das Lesen aus der Tabelle RATINGS, speziell aus RATINGCODE, einfügt.

Wie würde ich dabei vorgehen?

Alles, was ich weiß, ist, dass ich Variablen deklarieren und die Alter in sie je nach der GAMERATING einfügen muss.

EDIT:

Managed es Jungs zu tun,

hier ist das Format, das ich verwendet:

CREATE OR REPLACE TRIGGER [triggername]

BEFORE INSERT ON [Tabellenname]

FÜR JEDE REIHE

DECLARE

[Variable]

BEGIN

SELECT [Spalten Variablen aufzufüllen] INTO [Variable] FROM [zweite Tabelle] JOIN [Erste Tabelle] ON [secondtableid] =:. New [firsttableid] GROUP BY ORDER BY MAX ([firsttableid])

[Spalten Variablen Pop.]: Neu [firsttablecolumn]: = [Variablen]

END

Hoffnung th hilft jemandem in der Zukunft

+1

Schlechte Idee. Es gibt eine Grundregel: Geschäftslogik in Triggern nicht implementieren. Es gibt hier mehr Logik, als in einen Trigger gesetzt werden sollte. Trigger sind für kleinere Dinge - füllen Primärschlüssel aus Sequenzen, füllen "Wartungsdatum" und "Add Date" Spalten, so etwas. Um das zu tun, was Sie hier sehen, empfehle ich Ihnen, eine Funktion zu schreiben, die das Einfügen von INSERT in GAME und all die andere Logik erledigt. Viel Glück. –

+0

Ich weiß, das ist eine schlechte Idee, aber es ist für eine Klasse, und ich bin wirklich fest – raltandi

+0

Ich stimme Bob hier, nur um klar zu sein. Also hast du 'SPIEL (SPIEL, SPIEL, SPIEL, SPIEL, SPIELE, VERLAG) 'und du sagst du' (1,50, 'Verloren', 'M')' welcher Wert ist welche Spalte? –

Antwort

1
CREATE OR REPLACE TRIGGER [triggername] 
BEFORE INSERT ON [tablename] 
FOR EACH ROW 
DECLARE 
[variables] 
BEGIN 
SELECT [columns to populate variables] INTO [variables] FROM [second table] JOIN [first table] ON [secondtableid] = :New.[firsttableid] GROUP BY [columns to pop variables] ORDER BY MAX([firsttableid]) 
:New.[firsttablecolumn] := [variables] 
END 
Verwandte Themen