Try OpenEdge Now
skip to main content
SQL Development
Stored Procedures and Triggers : Working with triggers : OLDROW and NEWROW objects: passing values to triggers
 

OLDROW and NEWROW objects: passing values to triggers

The OLDROW and NEWROW objects allow SQL to pass row values as input parameters to the stored procedure in a trigger that executes once for each affected row. If the CREATE TRIGGER statement contains the REFERENCING clause, the SQL server implicitly instantiates an OLDROW or NEWROW object (or both, depending on the arguments to the REFERENCING clause) when it creates the Java class.
This allows the Java code in the snippet to use the getValue method of those objects to retrieve values of columns in rows affected by the trigger event and store them in procedure variables, and use the setValue method of those objects to set the values to be stored in the database before the trigger event. For example:
*The OLDROW object contains values of a row as it exists in the database before an update or delete operation. It is instantiated when triggers specify an UPDATE...REFERENCING OLDROW or DELETE...REFERENCING OLDROW clause. It is meaningless and not available for insert operations. The getValue method is valid on OLDROW before or after an update or delete and the setValue method is not valid on OLDROW at all.
*The NEWROW object contains values of a row as specified in an INSERT or UPDATE statement. It is instantiated when triggers specify an UPDATE...REFERENCING NEWROW or INSERT...REFERENCING NEWROW clause. It is meaningless and not available for delete operations. The getValue method is valid on NEWROW before or after an update or insert and the setValue method is only valid on NEWROW before insert or update.
UPDATE is the only triggering statement that allows both NEWROW and OLDROW in the REFERENCING clause.
Triggers use the OLDROW.getValue and NEWROW.getValue methods to assign a value from a row being modified to a procedure variable. The format and arguments for getValue are the same as in other OpenEdge SQL Java classes. This is the syntax for getValue:
getValue ( col_num , sql_data_type ) ;
col_num
Specifies the integer column number of the affected row. getValue retrieves the value in the column denoted by col_num. 1 denotes the first column of the table that the trigger is for. 2 denotes the second, n denotes the nth.
sql_data_type
Specifies the corresponding SQL data type. For a complete list of appropriate data types, see the Mapping between SQL and Java data types table.