2016-05-25 16 views
0

我對PL/SQL非常非常非常新,所以請原諒我對這個問題的無知,但我會感謝您的幫助!PL/SQL之前觸發 - 從其他表繼承列

我有這兩個表,比方說,評分和遊戲。

假設我想從RATINGS表繼承一個值並根據GAMERATING(從RATINGS TABLE繼承它)自動將它插入到GAME表中。

在我們的遊戲桌:(遊戲ID,GAMEPRICE,GAMENAME,GAMERATING,GAMEAGES,兩個publisherId)

而且在參數表我們有:(RATINGID,RATINGCODE,RATINGAGES)

如果我插入將下列值輸入到GAME中:(1,50,'Lost','M')我希望它使用GAMERATING作爲從RATINGS表中讀取的基礎,具體從RATINGCODE中自動插入RATINGS表中的GAMEAGES。

我該怎麼做呢?

我所知道的是我必須聲明變量並根據GAMERATING插入年齡。

編輯:

設法做到這一點的傢伙,

這裏是我使用的格式:

CREATE OR REPLACE TRIGGER [triggername]

BEFORE INSERT ON [表名]

FOR EACH ROW

DECLARE

[變量]

BEGIN

SELECT [列以填充變量] INTO [變量] FROM [第二表]加入[第一表]在[secondtableid] =:新[firsttableid] GROUP BY [列彈出變量] ORDER BY MAX([firsttableid])

:新[firsttablecolumn]:= [變量]

END

希望第是幫助未來的某人

+1

壞主意。有一條基本規則 - 不要在觸發器中實現業務邏輯。這裏有更多的邏輯比應該放入觸發器。觸發器適用於次要的東西 - 從序列中填充主鍵,填充「維護日期」和「添加日期」列,這種事情。爲了做到你在這裏看到的,我建議你寫一個函數來處理將INSERT插入GAME和所有其他邏輯。祝你好運。 –

+0

我知道這是一個壞主意,但它是一個班級,我真的被卡住 – raltandi

+0

我同意鮑勃在這裏,只是爲了清楚。所以你有'GAME(GAMEID,GAMEPRICE,GAMENAME,GAMERATING,GAMEAGES,PUBLISHERID)',你說你插入了'(1,50,'Lost','M')'這個值是哪一列? –

回答

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