sencillos - ¿Cuál es la sintaxis para usar una instrucción Select dentro de un Trigger PL/SQL?
trigger sql server update (3)
1) Debe haber algo más en tu ejemplo porque eso parece funcionar para mí
SQL> create table someTable( employeeid number );
Table created.
SQL> create table person( personid number, personnum varchar2(10) );
Table created.
SQL> ed
Wrote file afiedt.buf
1 CREATE OR REPLACE TRIGGER MYTRIGGER
2 AFTER INSERT ON SOMETABLE
3 FOR EACH ROW
4 DECLARE
5 v_emplid varchar2(10);
6 BEGIN
7 SELECT personnum
8 into v_emplid
9 FROM PERSON
10 WHERE PERSONID = :new.EMPLOYEEID;
11 dbms_output.put(v_emplid);
12 /* INSERT INTO SOMEOTHERTABLE USING v_emplid and some of the other values
from the trigger table*/
13* END MYTRIGGER;
14 /
Trigger created.
SQL> insert into person values( 1, ''123'' );
1 row created.
SQL> insert into sometable values( 1 );
1 row created.
2) Probablemente desee declarar que V_EMPLID es del tipo Person.PersonNum% TYPE para que pueda estar seguro de que el tipo de datos es correcto y de que si el tipo de datos de la tabla cambia no necesitará cambiar su código.
3) Supongo que sabe que su desencadenante no puede consultar o actualizar la tabla en la que se define el desencadenador (por lo tanto, no consultas o inserta en alguna tabla).
Esto es lo que tengo actualmente:
CREATE OR REPLACE TRIGGER MYTRIGGER
AFTER INSERT ON SOMETABLE
FOR EACH ROW
DECLARE
v_emplid varchar2(10);
BEGIN
SELECT
personnum into v_emplid
FROM PERSON
WHERE PERSONID = :new.EMPLOYEEID;
dbms_output.put(v_emplid);
/* INSERT INTO SOMEOTHERTABLE USING v_emplid and some of the other values from the trigger table*/
END MYTRIGGER;
DBA_ERRORS tiene este error: PL / SQL: ORA-00923: palabra clave FROM no encontrada donde se esperaba
Estás jugando con Lava (no solo fuego) en tu gatillo. DBMS_OUTPUT en un disparador es realmente, muy malo. Puede explotar en un desbordamiento de búfer en su desencadenante y se toma la transacción completa. Buena suerte rastreando eso. Si debe realizar un comportamiento de salida a consola, invoque un procedimiento AUTONOMOUS TRANSACTION que escriba en una tabla.
Los desencadenantes son bastante malvados. Me gustaban, pero son demasiado difíciles de recordar. Afectan los datos que a menudo conducen a datos MUTANTES (miedo y no solo porque Halloween está cerca).
Usamos desencadenantes para cambiar el valor de columnas como .new: LAST_MODIFIED: = sysdate y .new: LAST_MODIFIED_BY: = user. Eso es.
Nunca permita que un GATILLO evite que se complete una transacción. Encuentra otra opción
No usaría una sentencia select en un disparador nunca. Insertar en la mesa en lugar de seleccionar. Una vez que la tabla ya existe, select into no funciona en la mayoría de las bases de datos.