<!--
-$Header: /cvsroot/pgsql/doc/src/sgml/ref/create_rule.sgml,v 1.11 2000/04/07 17:23:11 momjian Exp $
+$Header: /cvsroot/pgsql/doc/src/sgml/ref/create_rule.sgml,v 1.12 2000/04/07 17:35:08 momjian Exp $
Postgres documentation
-->
two rules have the same semantics:
<programlisting>
ON UPDATE TO emp.salary WHERE emp.name = "Joe"
- DO UPDATE emp ( ... ) WHERE ...
+ DO
+ UPDATE emp ( ... ) WHERE ...
</programlisting>
<programlisting>
ON UPDATE TO emp-1.salary WHERE emp-2.name = "Joe"
- DO UPDATE emp-3 ( ... ) WHERE ...
+ DO
+ UPDATE emp-3 ( ... ) WHERE ...
</programlisting>
Each rule can have the optional tag INSTEAD.
<programlisting>
CREATE RULE bad_rule_combination_1 AS
ON SELECT TO emp
- DO INSTEAD SELECT TO toyemp;
+ DO INSTEAD
+ SELECT TO toyemp;
</programlisting>
<programlisting>
CREATE RULE bad_rule_combination_2 AS
ON SELECT TO toyemp
- DO INSTEAD SELECT TO emp;
+ DO INSTEAD
+ SELECT TO emp;
</programlisting>
<para>
This attempt to retrieve from EMP will cause
<programlisting>
CREATE RULE example_1 AS
ON UPDATE emp.salary WHERE current.name = "Joe"
- DO UPDATE emp (salary = new.salary)
- WHERE emp.name = "Sam";
+ DO
+ UPDATE emp
+ SET salary = new.salary
+ WHERE emp.name = "Sam";
</programlisting>
At the time Joe receives a salary adjustment, the event
ON SELECT TO EMP.salary
WHERE current.name = "Bill"
DO INSTEAD
- SELECT (emp.salary) from emp
- WHERE emp.name = "Joe";
+ SELECT emp.salary
+ FROM emp
+ WHERE emp.name = "Joe";
</programlisting>
</para>
<para>
the current user):
<programlisting>
CREATE RULE example_3 AS
- ON SELECT TO emp.salary
- WHERE current.dept = "shoe" AND current_user = "Joe"
+ ON
+ SELECT TO emp.salary
+ WHERE current.dept = "shoe" AND current_user = "Joe"
DO INSTEAD NOTHING;
</programlisting>
</para>
CREATE RULE example_4 AS
ON SELECT TO toyemp
DO INSTEAD
- SELECT (emp.name, emp.salary) FROM emp
+ SELECT (emp.name, emp.salary)
+ FROM emp
WHERE emp.dept = "toy";
</programlisting>
</para>
<programlisting>
CREATE RULE example_5 AS
ON INERT TO emp WHERE new.salary > 5000
- DO UPDATE NEWSET salary = 5000;
+ DO
+ UPDATE NEWSET salary = 5000;
</programlisting>
</para>
</refsect1>