ప్రధాన కంటెంట్‌కు వెళ్లండి
మాడ్యూల్ 12 · 4లో పాఠం 3కోర్సులో 47/57~15 min
మాడ్యూల్ పాఠాలు (3/4)

ట్రిగ్గర్‌లకు పరిచయం

ట్రిగ్గర్ అనేది మ్యాజిక్ బాక్స్ (సెన్సార్), ఇది డేటాలో ఈవెంట్‌ను ఇన్‌సర్ట్ చేయడానికి, అప్‌డేట్ చేయడానికి లేదా తొలగించడానికి ముందు లేదా తర్వాత ఆటోమేటిక్‌గా లాజిక్‌ను రన్ చేస్తుంది.\nఅయితే, ప్రతిస్పందించడానికి టేబుల్‌కి బోధించే ముందు, మేము దానికి PL/pgSQLలో వ్రాసిన ప్రత్యేక "ట్రిగ్గర్ ఫంక్షన్"ని అందించాలి, అది సింథటిక్ ఫార్మాట్‌ని తిరిగి ఇవ్వడం ద్వారా ముగించాలి" ".

ఈ ఫంక్షన్‌లు కుండలీకరణాల్లో సాధారణ ఆర్గ్యుమెంట్‌లను అంగీకరించవు; బదులుగా వారు మేజిక్ అంతర్నిర్మిత వస్తువులను 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'forcenameuppercase' అని పిలవబడే ఒక ట్రిగ్గర్ ఫంక్షన్‌ను వ్రాయండి. ఇది ఏ () వాదనలను అంగీకరించదు.\nఇది TRIGGERని అందిస్తుంది. శరీర టెంప్లేట్‌ను సృష్టించండి.\n'NEW.first_name = UPPER(NEW.first_name);' అనే మ్యాజిక్ అసైన్‌మెంట్ ద్వారా మొత్తం ఇన్‌కమింగ్ ఆబ్జెక్ట్‌ను నిర్బంధించండి. ఆ తర్వాత రీషేప్ చేయబడిన కొత్త వేరియబుల్‌ని తిరిగి ఇవ్వండి.

ఎడిటర్ లోడ్ అవుతోంది…
సూచనను చూపించు

FUNCTION క్రియేట్ చేయండి లేదా రీప్లేస్ చేయండి force_uppercase_name() TRIGGERని $$ 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' వంటి లాజిక్‌ని ఉపయోగించండి, ఇది స్థానిక మినహాయింపును పెంచుతుంది. 'రైజ్ మినహాయింపు ''ప్రెజ్జో నాన్ అబ్బాసబిల్!'';'.

ఎడిటర్ లోడ్ అవుతోంది…
సూచనను చూపించు

ప్రారంభించడానికి NEW.unit_price < OLD.unit_price ఆపై మినహాయింపును పెంచండి 'Prezzo నాన్ అబ్బాసబైల్!'; ముగింపు IF; కొత్తగా తిరిగి; ముగింపు;

3 ప్రయత్నాల తర్వాత పరిష్కారం లభిస్తుంది