elbaulp / elbaulp.github.io

Contenido del blog El Baúl del programador usando emacs org-mode
https://elbauldelprogramador.com
4 stars 4 forks source link

PL/SQL. Disparadores o Triggers #28

Open utterances-bot opened 4 years ago

utterances-bot commented 4 years ago

PL/SQL. Disparadores o Triggers

Blog en el que publico todo lo que aprendo. Principalmente interesado en seguridad, Machine Learning, criptografía, ciencia de datos y desarrollo software.

https://elbauldelprogramador.com/plsql-disparadores-o-triggers/

JBL2 commented 4 years ago

Hola yo tengo el siguiente enunciado y siguiendo esta pagina el codigo ahora lo tengo de esta manera

2) Modificar el trigger per a que inserti una fila a la taula audit_table abans de modificar el salari d’un o més empleats. L’action que ha d’afegir a la taula ha de ser “Updating”.

CREATE OR REPLACE TRIGGER max_salary AFTER update OF salary ON EMPLOYEES DECLARE salari_maxim employees.salary%TYPE; BEGIN

SELECT MAX(salary) INTO salari_maxim FROM EMPLOYEES;
DBMS_OUTPUT.PUT_LINE(' El salary maxim es: ' ||salari_maxim); END;

4) Modificació de l’exercici 2.

Afegir a la taula audit_table un camp per a guardar l’id de l’empleat.

ALTER TABLE AUDIT_TABLE ADD EMP_ID NUMBER(10);

Si l’acció que es realitza és una actualització, el trigger ha de d’afegir una fila a la taula amb l’id o l’acció “Updating”, abans de modificar el salari d’un o més empleats; si s’elimina un empleat, l’acció ha de ser “deleting”, i si s’afegeix un empleat, ‘Inserted’ .

CREATE TRIGGER max_salary AFTER INSERT OR DELETE OR UPDATE ON audit_table FOR EACH ROW BEGIN IF INSERTING THEN INSERT INTO audit_table VALUES ('Inserted',:NEW.employee_id); ELSIF DELETING THEN INSERT INTO audit_table VALUES ('Deleted',:OLD.employee_id); ELSIF UPDATING THEN INSERT INTO audit_table VALUES (UPDATING || ' is updating' || ' old employee_id: ' || :OLD.employee_id|| ' new employee_id ' || :NEW.employee_id); END IF; END;

Dándome esto como resultado. Que debería arreglar para que me saliese lo que me pide? Gracias,

ORA-04081: el disparador 'MAX_SALARY' ya existe ORA-06512: en "SYS.WWV_DBMS_SQL_APEX_200100", línea 581 ORA-06512: en "SYS.DBMS_SYS_SQL", línea 1658 ORA-06512: en "SYS.WWV_DBMS_SQL_APEX_200100", línea 567 ORA-06512: en "APEX_200100.WWV_FLOW_DYNAMIC_EXEC", línea 2127

Rizoss commented 3 years ago

Hola, siento molestar. Pero estoy intentando hacer un trigger compuesto. Lo que no sé muy bien es como hacer una comparación a nivel de tabla con un trigger update on table; con un update de esa misma tabla.

elbaulp commented 3 years ago

Hola, siento molestar. Pero estoy intentando hacer un trigger compuesto. Lo que no sé muy bien es como hacer una comparación a nivel de tabla con un trigger update on table; con un update de esa misma tabla.

Hola, lamento decirte que hace muchos años que no escribo nada de SQL :-(. Espero que encuentres solucion

JBL2 commented 3 years ago

Déjelo al final consegui aprobar y obtener el grado superior.

El mié., 7 abr. 2021 14:53, Alejandro Alcalde @.***> escribió:

Hola, siento molestar. Pero estoy intentando hacer un trigger compuesto. Lo que no sé muy bien es como hacer una comparación a nivel de tabla con un trigger update on table; con un update de esa misma tabla.

Hola, lamento decirte que hace muchos años que no escribo nada de SQL :-(. Espero que encuentres solucion

— You are receiving this because you commented. Reply to this email directly, view it on GitHub https://github.com/elbaulp/elbaulp.github.io/issues/28#issuecomment-814889256, or unsubscribe https://github.com/notifications/unsubscribe-auth/AGCYEQWPVPCCJ5VZVP72B4DTHRIU5ANCNFSM4NIO6NDQ .