Advertisement
Guest User

Untitled

a guest
Nov 24th, 2017
106
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PL/SQL 1.40 KB | None | 0 0
  1. CREATE TABLE reservation (
  2.   reservation_id INTEGER,
  3.   msg            INTEGER,
  4.   CONSTRAINT reservation_pk PRIMARY KEY (reservation_id)
  5. );
  6.  
  7. CREATE TABLE payment (
  8.   payment_id      INTEGER,
  9.   reservation_id  INTEGER,
  10.   msg             VARCHAR2(15),
  11.   CONSTRAINT reservation_id_fk FOREIGN KEY (reservation_id)
  12.   REFERENCES reservation(reservation_id)
  13. );
  14.  
  15. INSERT INTO reservation VALUES (1, NULL);
  16. INSERT INTO reservation VALUES (2, NULL);
  17. INSERT INTO reservation VALUES (3, NULL);
  18. INSERT INTO reservation VALUES (4, NULL);
  19.  
  20. INSERT INTO payment VALUES (1, 1, 'unconfirmed');
  21. INSERT INTO payment VALUES (2, 2, 'unconfirmed');
  22. INSERT INTO payment VALUES (3, 3, 'unconfirmed');
  23.  
  24. COMMIT;
  25.  
  26. CREATE OR REPLACE TRIGGER status_trigger
  27. BEFORE INSERT OR UPDATE
  28. ON payment
  29. FOR EACH ROW
  30. DECLARE
  31.     v_status VARCHAR(15);
  32.     PRAGMA AUTONOMOUS_TRANSACTION;
  33. BEGIN
  34.     SELECT p.msg
  35.       INTO v_status
  36.       FROM payment     p
  37.       JOIN reservation r
  38.         ON p.reservation_id = r.reservation_id
  39.      WHERE p.reservation_id = :NEW.reservation_id;
  40.      
  41.     DBMS_OUTPUT.PUT_LINE(v_status);
  42. END;
  43. /
  44.  
  45. /*This line will run printing 'unconfirmed', because reservation_id 1 is already in the table*/
  46. INSERT INTO payment VALUES (4, 1, 'confirmed');
  47. /*This line will fail with NO_DATA_FOUND exception, because trigger tried to perfom a dirty read. */
  48. INSERT INTO payment VALUES (5, 4, 'unconfirmed');
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement