முக்கிய உள்ளடக்கத்திற்குச் செல்லவும்
தொகுதி 12 · பாடம் 3 இன் 4பாடத்திட்டத்தில் 47/57~15 min
தொகுதி பாடங்கள் (3/4)

தூண்டுதல்களுக்கான அறிமுகம்

தூண்டுதல் என்பது ஒரு மேஜிக் பாக்ஸ் (சென்சார்) ஆகும், இது தரவுகளில் நிகழ்வைச் செருகுவதற்கு, புதுப்பிப்பதற்கு அல்லது நீக்குவதற்கு முன் அல்லது அதற்குப் பிறகு தானாக ஒரு தர்க்கத்தை இயக்கும்.\nஒரு அட்டவணையை எதிர்வினையாற்ற கற்றுக்கொடுக்கும் முன், அதற்கு PL/pgSQL இல் எழுதப்பட்ட ஒரு சிறப்பு "Trigger Function" கொடுக்க வேண்டும்.

இந்த செயல்பாடுகள் அடைப்புக்குறிக்குள் உள்ள சாதாரண வாதங்களை ஏற்காது; அதற்கு பதிலாக அவர்கள் மேஜிக் உள்ளமைக்கப்பட்ட பொருள்களான NEW மற்றும் OLD ஆகியவற்றை இலவசமாக வழங்குகிறார்கள், இதில் சென்சார் பார்க்கும் அட்டவணையில் இருந்து அசல் அல்லது உள்வரும் வரிசை தரவு உள்ளது!

SQL
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;

இந்த நடைமுறையானது பதிவில் எழுதும் கடினமான வேலையைச் செய்கிறது. பின்னர், இரண்டாவது கட்டத்தில், நாம் பாதுகாக்க விரும்பும் அட்டவணையின் நிகழ்வுகளுக்கு அது நிரந்தரமாக இணைக்கப்படும்.

நீங்களே முயற்சி செய்து பாருங்கள்

உடற்பயிற்சி#sql.m12.l3.e1
முயற்சிகள்: 0ஏற்றுகிறது…

நாங்கள் வாடிக்கையாளர்களைப் பாதுகாக்க வேண்டும்: 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 முயற்சிகளுக்குப் பிறகு தீர்வு கிடைக்கும்

உடற்பயிற்சி#sql.m12.l3.e2
முயற்சிகள்: 0ஏற்றுகிறது…

தீங்கிழைக்கும் புதுப்பிப்புகளைத் தடுக்கும் 'protect_price_drops()' என்ற தூண்டுதல் செயல்பாட்டை உருவாக்கவும், இது ஒரு தயாரிப்பின் மீது அபத்தமான குறைந்த விலையைத் தாக்கும் நபர் சேமிக்கப் போகிறார்.\n'IF NEW.unit_price < OLD.unit_price THEN' போன்ற லாஜிக்கைப் பயன்படுத்தவும். 'ரைஸ் விதிவிலக்கு ''ப்ரெஸ்ஸோ நோன் அபாசபில்!'';'.

எடிட்டரை ஏற்றுகிறது…
குறிப்பைக் காட்டு

BEGIN என்றால் NEW.unit_price < OLD.unit_price பிறகு விதிவிலக்கு உயர்த்தவும் 'Prezzo non abbassabile!'; முடிவு IF; புதியதாகத் திரும்பு; முடிவு;

3 முயற்சிகளுக்குப் பிறகு தீர்வு கிடைக்கும்