Triggers & Stored Procedures: Functions
Module: Schema Design & Advanced DDL
## PostgreSQL Trigger Syntax
```sql
CREATE TRIGGER trigger_name
{BEFORE | AFTER | INSTEAD OF} {INSERT | UPDATE | DELETE}
ON table_name
[FOR EACH {ROW | STATEMENT}]
[WHEN (condition)]
EXECUTE FUNCTION function_name();
-- Trigger function
CREATE FUNCTION function_name() RETURNS TRIGGER AS $$
BEGIN
-- Access OLD values (UPDATE/DELETE)
-- Access NEW values (INSERT/UPDATE)
-- TG_OP: Operation type (INSERT/UPDATE/DELETE)
-- TG_TABLE_NAME: Table name
RETURN NEW; -- or OLD or NULL
END;
$$ LANGUAGE plpgsql;
```
## MySQL Trigger Syntax
```sql
CREATE TRIGGER trigger_name
{BEFORE | AFTER} {INSERT | UPDATE | DELETE}
ON table_name
FOR EACH ROW
BEGIN
-- Access OLD values (UPDATE/DELETE)
-- Access NEW values (INSERT/UPDATE)
-- Trigger body
END;
```
## Stored Procedure Syntax
**PostgreSQL:**
```sql
CREATE PROCEDURE procedure_name(param1 TYPE, param2 TYPE)
LANGUAGE plpgsql
AS $$
BEGIN
-- Procedure body
END;