-
Triggers são construções especiais do PL/SQL similares a procedures. Contudo, um procedure é executado explicitamente de um outro bloco via uma chamada de procedimento, enquanto um trigger é executado implicitamente sempre que um evento engatilhado acontece(evento relacionado com uma tabela). A estrutura do trigger é definida como segue:
CREATE [OR REPLACE] TRIGGER <trigger_name>
{BEFORE|AFTER} {INSERT|DELETE|UPDATE} ON <table_name>
[FOR EACH ROW [WHEN (<trigger_condition>)]]
<trigger_body>
Sendo que:
- só pode criar triggers BEFORE e AFTER para tabelas
- só podem ser especificado até três eventos engatilhados: INSERT OR DELETE OR UPDATE ON...
- Se FOR EACH ROW for especificado, o trigger é row-level; do contrário, o trigger será statement-level
- <trigger_body> é um bloco PL/SQL
- As variáveis especiais NEW e OLD estão disponíveis para fazerem referência às tuplas nova e velha respectivamente
[1] http://www.fundao.wiki.br/articles.asp?cod=31
-
Uma trigger realmente pode estar associada a um esquema ou associada a um banco de dados?
-
Também fiquei com a dúvida de gustavo: "Uma trigger realmente pode estar associada a um esquema ou associada a um banco de dados?". Alguém comenta?
-
A trigger is a named program unit that is stored in the database and fired (executed) in response to a specified event. The specified event is associated with either a table, a view, a schema, or the database, and it is one of the following:
A database manipulation (DML) statement (DELETE, INSERT, or UPDATE)
A database definition (DDL) statement (CREATE, ALTER, or DROP)
A database operation (SERVERERROR, LOGON, LOGOFF, STARTUP, or SHUTDOWN)
The trigger is said to be defined on the table, view, schema, or database.
Fonte: https://docs.oracle.com/cd/B28359_01/appdev.111/b28370/triggers.htm