Sunteți pe pagina 1din 4

Oracle Trigger After Insert Example & Create The after insert trigger in oracle is a DML trigger which

is fired by an insert statement on a table. The oracle after insert trigger is used to update the values on the table and to log the inserts in another table. Both the insert and the trigger executes in a single transaction. First the insert statement executes and then the trigger executes. As the insert statement executes first, you cannot generate primary key values using the after insert trigger. User the before insert trigger to generate the primary key values. Oracle Trigger After Insert Example: 1. Updating values in the table you can create after insert trigger to update the values in the table on which the insert statement is fired. See the following example which updates the hire date of the employee CREATE OR REPLACE TRIGGER update_employees AFTER INSERT ON employees FOR EACH ROW BEGIN UPDATE employees SET hire_date = sysdate WHERE employee_id = :new.employee_id; END update_employees; / By default an employees joining date is on the day which you insert a record into the employees table. So, you dont need to explicitly specify the hire_date value in the insert statement. Just use the above trigger statement which update the hire date when you insert a record into the employees table. 2. Logging the rows in another table. You can use the after insert tigger to track the newly records created in a table in another log table. See the following example: CREATE OR REPLACE TRIGGER log_rows_products AFTER INSERT ON products FOR EACH ROW BEGIN INSERT INTO products_changes ( product_id, product_name ) VALUES ( :new.product_id, :new.product_name ); END log_rows_products; / Whenever a new insert statement is fired on the products table, the above trigger gets fired and inserts the records into another table (products_changes).

Oracle Trigger Before Insert Create & Example The before insert trigger in oracle is a DML trigger which is fired by an insert statement on a table. The oracle before insert trigger is used to generate primary key values on the table and to log the inserts in another table. Both the insert and the trigger executes in a single transaction.

Oracle Trigger Before Insert Example: 1. Generating Primary key value for the table you can create a trigger to generate a primary key value for the table on which the insert statement is fired. The following example shows generating the primary key value for the employees table using the trigger: CREATE OR REPLACE TRIGGER gen_pk_employees BEFORE INSERT ON employees FOR EACH ROW BEGIN SELECT emp_sequence.NEXTVAL INTO :new.employee_id FROM DUAL; END gen_pk_employees; / When you create the above trigger, you dont need to specify a value for the primary key column in the INSERT statement. Note that the after insert trigger cannot generate a primary key value. 2. Logging the rows in another table. You can use the tigger to log the newly inserted rows in a table in another table. The following trigger logs the new rows in employees table: CREATE OR REPLACE TRIGGER log_rows_employees BEFORE INSERT ON employees FOR EACH ROW BEGIN INSERT INTO employees_changes ( employee_id, first_name, last_name ) VALUES ( :new.employee_id, :new.first_name, :new.last_name ); END log_rows_employees; / Whenever a new insert statement is fired on the employees table, the above trigger gets fired and inserts the records into another table (employees_changes).

Instead of Triggers on Views Example in Oracle Instead of triggers in oracle database are defined on views only. A normal DML trigger executes only when a DML operation is issued on a table. Whereas instead of trigger fires when a DML statment is issued on the view. Insteadof triggers must be row level.

Take a look at the following view defintion: Create or replace view emp_dept_join as Select d.department_id, d.department_name, e.first_name, e.last_name from employees e, departments d

where e.department_id = d.department_id; As the view consists of two table joins, it is illegal to insert records into this view as the insert requires both the underlying tables to be modified. By creating an instead-of trigger on the view, you can insert the records into both the underlying tables. An examples is shown below: CREATE OR REPLACE TRIGGER insert_emp_dept INSTEAD OF INSERT ON emp_dept_join DECLARE v_department_id departments.department_id%TYPE; BEGIN BEGIN SELECT department_id INTO v_department_id FROM departments WHERE department_id = :new.department_id; EXCEPTION WHEN NO_DATA_FOUND THEN INSERT INTO departments (department_id, department_name) VALUES (dept_sequence.nextval, :new.department_name) RETURNING ID INTO v_department_id; END; INSERT INTO employees (employee_id, first_name, last_name, department_id) VALUES(emp_sequence.nextval, :new.first_name, :new.last_name, v_department_id); END insert_emp_dept; / System Triggers Example in Oracle PLSQL System Trigger fires when a system event like database startup, shutdown or DDL operations like creating objects occur in oracle database. System triggers wont fire for DML operation. We will create a system trigger which logs the object creation information in the current schema. First create the following table in the oracle database: CREATE TABLE Audit_DDL_OPS ( ObjectOwner varchar2(30), ObjectType varchar2(30), ObjectName varchar2(30), CreationDate Date ); Now create the following system trigger in the same schema: CREATE OR REPLACE TRIGGER Audit_DDLS AFTER CREATE ON SCHEMA BEGIN INSERT INTO Audit_DDL_OPS (ObjectOwner, ObjectType, ObjectName, CreationDate ) VALUES (ORA_DICT_OBJ_OWNER, ORA_DICT_OBJ_TYPE, ORA_OBJ_DICT_NAME, SYSDATE ) END; /

Whenever a new object created in the database, the above system trigger logs the user information in the Audit_DDL_OPS table.

DDL statements are not allowed in Procedures (PLSQL BLOCK) PL/SQL objects are precompiled. All the dependencies are checked before the execution of the objects. This makes the programs to execute faster. The dependencies include database objects, Tables, Views, synonyms and other objects. The dependency does not depend on the data. As DML (Data Manipulation Language) statements do not change the dependency, they can run directly in PL/SQL objects. On the other hand, DDL (Data Definition Language) statements like CREATE, DROP, ALTER commands and DCL (Data Control Language) statements like GRANT, REVOKE can change the dependencies during the execution of the program. Example: Let say you have dropped a table during the execution of a program and later in the same program when you try to insert a record in to that table the program will fail. This is the reason why DDL statements are not allowed directly in PL/SQL programs.

Oracle Procedure To Disable All Triggers In A Schema(User) The below procedure can be used to disable all the triggers in a schema in oracle database. CREATE OR REPLACE PROCEDURE DISABLE_TRIGGERS IS v_statement VARCHAR2(500); CURSOR trigger_cur IS SELECT trigger_name FROM user_triggers; BEGIN FOR i in trigger_cur LOOP v_statement := 'ALTER TRIGGER '||y.trigger_name||' DISABLE'; EXECUTE IMMEDIATE v_statement; END LOOP; END;

S-ar putea să vă placă și