தொகுதி பாடங்கள் (3/4)
தூண்டுதல்களுக்கான அறிமுகம்
தூண்டுதல் என்பது ஒரு மேஜிக் பாக்ஸ் (சென்சார்) ஆகும், இது தரவுகளில் நிகழ்வைச் செருகுவதற்கு, புதுப்பிப்பதற்கு அல்லது நீக்குவதற்கு முன் அல்லது அதற்குப் பிறகு தானாக ஒரு தர்க்கத்தை இயக்கும்.\nஒரு அட்டவணையை எதிர்வினையாற்ற கற்றுக்கொடுக்கும் முன், அதற்கு PL/pgSQL இல் எழுதப்பட்ட ஒரு சிறப்பு "Trigger Function" கொடுக்க வேண்டும்.
இந்த செயல்பாடுகள் அடைப்புக்குறிக்குள் உள்ள சாதாரண வாதங்களை ஏற்காது; அதற்கு பதிலாக அவர்கள் மேஜிக் உள்ளமைக்கப்பட்ட பொருள்களான NEW மற்றும் OLD ஆகியவற்றை இலவசமாக வழங்குகிறார்கள், இதில் சென்சார் பார்க்கும் அட்டவணையில் இருந்து அசல் அல்லது உள்வரும் வரிசை தரவு உள்ளது!
CREATE OR REPLACE FUNCTION audit_deletions()
RETURNS TRIGGER AS $$
BEGIN
-- OLD.id is magically the id value of the poor record being deleted
INSERT INTO audit_log (table_name, record_id, action)
VALUES (TG_TABLE_NAME, OLD.id, 'DELETE');
RETURN OLD; -- Triggers before a Delete route must grant the exit
END;
$$ LANGUAGE plpgsql;இந்த நடைமுறையானது பதிவில் எழுதும் கடினமான வேலையைச் செய்கிறது. பின்னர், இரண்டாவது கட்டத்தில், நாம் பாதுகாக்க விரும்பும் அட்டவணையின் நிகழ்வுகளுக்கு அது நிரந்தரமாக இணைக்கப்படும்.
நீங்களே முயற்சி செய்து பாருங்கள்
நாங்கள் வாடிக்கையாளர்களைப் பாதுகாக்க வேண்டும்: 18 வயதுக்குட்பட்ட எவரும் (எங்கள் மெய்நிகர் சோதனை) அல்லது கற்பனையான தர்க்கத்திற்கு அப்பாற்பட்டு, INSERT நேரத்தில் அனுப்பப்பட்ட 'first_name' சரத்தை எப்போதும் பெரிய எழுத்துக்களில் தரவுத்தளத்தில் சேமிக்கும்படி கட்டாயப்படுத்த விரும்புகிறோம், எந்த JS கிளையன்ட் வடிவமைப்பையும் புறக்கணிக்கிறோம். இது எந்த () வாதங்களையும் ஏற்காது.\nஇது TRIGGER ஐ வழங்குகிறது. உடல் டெம்ப்ளேட்டை உருவாக்கவும்.\nஉள்வரும் பொருள் முழுவதையும் 'NEW.first_name = UPPER(NEW.first_name);' என்ற மேஜிக் ஒதுக்கீட்டின் மூலம் கட்டாயப்படுத்தி ஒதுக்கவும். மறுவடிவமைக்கப்பட்ட புதிய மாறியை திரும்பப் பெறவும்.
குறிப்பைக் காட்டு
செயல்பாட்டை உருவாக்கவும் அல்லது மாற்றவும் force_uppercase_name() $$ BEGIN NEW.first_name = UPPER(NEW.first_name); புதியதாகத் திரும்பு; முடிவு; $$ மொழி plpgsql;
3 முயற்சிகளுக்குப் பிறகு தீர்வு கிடைக்கும்
தீங்கிழைக்கும் புதுப்பிப்புகளைத் தடுக்கும் 'protect_price_drops()' என்ற தூண்டுதல் செயல்பாட்டை உருவாக்கவும், இது ஒரு தயாரிப்பின் மீது அபத்தமான குறைந்த விலையைத் தாக்கும் நபர் சேமிக்கப் போகிறார்.\n'IF NEW.unit_price < OLD.unit_price THEN' போன்ற லாஜிக்கைப் பயன்படுத்தவும். 'ரைஸ் விதிவிலக்கு ''ப்ரெஸ்ஸோ நோன் அபாசபில்!'';'.
குறிப்பைக் காட்டு
BEGIN என்றால் NEW.unit_price < OLD.unit_price பிறகு விதிவிலக்கு உயர்த்தவும் 'Prezzo non abbassabile!'; முடிவு IF; புதியதாகத் திரும்பு; முடிவு;
3 முயற்சிகளுக்குப் பிறகு தீர்வு கிடைக்கும்