PL/SQL pour déclencher après insert, update, delete, qui saisit des Données dans la Table des Journaux avec une Séquence
Je suis en train de travailler sur un problème. Je suis en cours d'exécution dans la compilation de problèmes avec mon déclencheur et j'ai du mal à comprendre comment créer un déclencheur qui fait référence à une séquence et une autre table, et insérer les valeurs dans une table de journal que j'ai créé. J'ai lu que par une SÉRIE de not null sur la colonne de la Table d'entrée peuvent élimine la nécessité d'une séquence et de la table de référence, mais j'en ai besoin pour mes devoirs au travail.
J'ai besoin d'aide pour déterminer comment obtenir mon déclencheur à compiler. C'est avoir des problèmes avec mes Variables de liaison :NOUVEAU à partir de la séquence, et aussi le idpay valeur insérée à partir d'une autre Table. Je ne sais pas si mes déclarations sont correctes, et les deux premières déclarations après le début de déclaration sont correctes, que la 1ère ligne a été signalé comme une erreur de compilation. Je pense que quelque chose se passe avec cet exemple et mon manque de la valeur NULL en entrée il y a dans l'instruction if, mais savez pas où mettre cette partie dans mon codage.
Et bien sûr le Oracle 11g document de Référence pour les Déclencheurs, j'ai dépassé cela, mais vous pouvez vérifier vous-même trop.
Ici est la question de l'installation:
1. Utiliser les Dons de la base de données. L'organisation veut suivre toutes les promesse de paiement
de l'activité. Chaque fois qu'une promesse de paiement est ajouté, modifié ou supprimé, le suivant
renseignements devraient être présentés dans un tableau distinct: nom d'utilisateur, de la date, de l'action
prises (INSERT, UPDATE ou DELETE), et le idpay de la valeur pour le paiement.
Créer une table nommée DD_PAYTRACK de tenir cette information. Inclure une colonne de clé primaire
pour être habité par une séquence, et de créer de nouveaux séquence nommée DD_PTRACK_SEQ pour l'
colonne de clé primaire.
Créer un seul déclencheur pour enregistrer les informations requises pour suivre gage
le paiement de l'activité, et de tester le déclencheur pour tous les types d'action pour idpay=1470.
Afficher les enregistrements de la DD_PAYTRACK table à l'aide de l'instruction SELECT.
select * from dd_paytrack;
IDTRACK PTUSER PTDATE PTACTION PTPAYID
4 AAX5367E220 10-DEC-12 INSERT 1470
5 AAX5367E220 10-DEC-12 UPDATE 1470
6 AAX5367E220 10-DEC-12 DELETE 1470
Voici ce que j'ai fait jusqu'à présent, même après l'ajout de ces instructions Insert, Update et Delete, c'est encore de retourner une table Vide, mais en raison de la réponse ci-dessous, j'ai corrigé ce qui a été suggéré.
*Je l'ai corrigé, j'ai dû ajouter mon propre Update, Insert et Delete après la compilation de la Gâchette. Fonctionne très bien maintenant. Merci Noel!!!*
DROP TABLE dd_paytrack;
DROP SEQUENCE idtrack_seq;
CREATE TABLE dd_paytrack(
idtrack NUMBER,
pt_user VARCHAR2(30),
pt_date DATE,
pt_action VARCHAR2(30),
pt_payid NUMBER(6,0),
CONSTRAINT pk_dd_paytrack PRIMARY KEY (idtrack)
);
CREATE SEQUENCE idtrack_seq;
CREATE OR REPLACE TRIGGER pledge_pay_trigger
AFTER
INSERT OR
UPDATE OR
DELETE
ON dd_payment
FOR EACH ROW
DECLARE
log_action dd_paytrack.pt_action%TYPE;
id_pay dd_paytrack.pt_payid%TYPE;
BEGIN
id_pay := :NEW.idpay;
IF INSERTING THEN
log_action := 'Insert';
ELSIF UPDATING THEN
log_action := 'Update';
ELSIF DELETING THEN
id_pay := :OLD.idpay;
log_action := 'Delete';
ELSE
DBMS_OUTPUT.PUT_LINE('This code is not reachable.');
END IF;
INSERT INTO dd_paytrack (idtrack, pt_user, pt_date, pt_action, pt_payid)
VALUES(idtrack_seq.NEXTVAL, USER, TO_CHAR(SYSDATE, 'DD-MON-YY'), log_action,
id_pay);
END pledge_pay_trigger;
/
INSERT INTO dd_payment(idpay, idpledge, payamt, paydate, paymethod)
VALUES (1470, 105, 250, SYSDATE, 'CC');
commit;
UPDATE dd_payment
SET payamt = 25
WHERE idpay = 1470;
commit;
UPDATE dd_payment
SET payamt = 2000
WHERE idpay = 1470;
COMMIT;
DELETE
FROM dd_payment
WHERE idpay = 1470;
COMMIT;
SET serveroutput ON
select * from dd_paytrack;
Ici, c'est le Don Schéma de la Table de laquelle elle fait référence à la dd_paytrack Table pour mes Devoirs problème. Je l'ai testé et ce schéma semble fonctionner très bien après le découpage et le collage.
-- The DoGood Donor Database
-- A donor, who represents a person or company that has committed to make a donation to
the DoGood organzation.
DROP TABLE dd_donor CASCADE CONSTRAINTS;
DROP TABLE dd_project CASCADE CONSTRAINTS;
DROP TABLE dd_status CASCADE CONSTRAINTS;
DROP TABLE dd_pledge CASCADE CONSTRAINTS;
DROP TABLE dd_payment CASCADE CONSTRAINTS;
CREATE TABLE DD_Donor (
idDonor number(4),
Firstname varchar2(15),
Lastname varchar2(30),
Typecode CHAR(1),
Street varchar2(40),
City varchar2(20),
State char(2),
Zip varchar2(9),
Phone varchar2(10),
Fax varchar2(10),
Email varchar2(25),
News char(1),
dtentered date DEFAULT SYSDATE,
CONSTRAINT donor_id_pk PRIMARY KEY(idDonor) );
CREATE TABLE DD_Project (
idProj number(6),
Projname varchar2(60),
Projstartdate DATE,
Projenddate DATE,
Projfundgoal number(12,2),
ProjCoord varchar2(20),
CONSTRAINT project_id_pk PRIMARY KEY(idProj),
CONSTRAINT project_name_uk UNIQUE (Projname) );
CREATE TABLE DD_Status (
idStatus number(2),
Statusdesc varchar2(15),
CONSTRAINT status_id_pk PRIMARY KEY(idStatus) );
CREATE TABLE DD_Pledge (
idPledge number(5),
idDonor number(4),
Pledgedate DATE,
Pledgeamt number(8,2),
idProj number(5),
idStatus number(2),
Writeoff number(8,2),
paymonths number(3),
Campaign number(4),
Firstpledge char(1),
CONSTRAINT pledge_id_pk PRIMARY KEY(idPledge),
CONSTRAINT pledge_idDonor_fk FOREIGN KEY (idDonor)
REFERENCES dd_donor (idDonor),
CONSTRAINT pledge_idProj_fk FOREIGN KEY (idProj)
REFERENCES dd_project (idProj),
CONSTRAINT pledge_idStatus_fk FOREIGN KEY (idStatus)
REFERENCES dd_status (idStatus));
CREATE TABLE DD_Payment (
idPay number(6),
idPledge number(5),
Payamt number(8,2),
Paydate DATE,
Paymethod char(2),
CONSTRAINT payment_id_pk PRIMARY KEY(idPay),
CONSTRAINT pay_idpledge_fk FOREIGN KEY (idPledge)
REFERENCES dd_pledge (idPledge) );
INSERT INTO dd_donor
VALUES (301, 'Mary', 'Treanor', 'I','243 main St.', 'Norfolk',
'VA','23510',NULL,NULL,'[email protected]','Y','01-SEP-2012');
INSERT INTO dd_donor
VALUES (302, 'Patrick', 'Lee', 'I','11 Hooper St.', 'Norfolk',
'VA','23510','7572115445',NULL,'[email protected]','N','09-SEP-2012');
INSERT INTO dd_donor
VALUES (303, 'Terry', 'Venor', 'I','556 Loop Lane.', 'Chesapeake',
'VA','23320',NULL,NULL,'[email protected]','Y','18-SEP-2012');
INSERT INTO dd_donor
VALUES (304, 'Sherry', 'Pane', 'I','Center Blvd.', 'Virginia Beach',
'VA','23455',NULL,NULL,'[email protected]','Y','21-SEP-2012');
INSERT INTO dd_donor
VALUES (305, 'Thomas', 'Sheer', 'I','66 Train St.', 'Chesapeake',
'VA','23322','7579390022',NULL,'[email protected]','Y','01-MAR-2013');
INSERT INTO dd_donor
VALUES (306, NULL, 'Coastal Developers', 'B','3667 Shore Dr.', 'Virginia Beach',
'VA','23450','8889220004',NULL,'[email protected]','Y','30-SEP-2012');
INSERT INTO dd_donor
VALUES (307, NULL, 'VA Community Org', 'G','689 Bush Dr.', 'Norfolk',
'VA','23513','7578337467','7578337468','[email protected]','Y','03-OCT-2012');
INSERT INTO dd_donor
VALUES (308, 'Betty', 'Konklin', 'I','11 Shark Ln.', 'Virginia Beach',
'VA','23455','7574550087',NULL,'[email protected]','N','04-OCT-2012');
INSERT INTO dd_donor
VALUES (309, 'Jim', 'Tapp', 'I','200 Pine Tree Blvd.', 'Chesapeake',
'VA','23320','',NULL,'','N','08-OCT-2012');
INSERT INTO dd_donor
VALUES (310, NULL, 'Unique Dezigns', 'B','Connect Circle Unit 12', 'Chesapeake',
'VA','23320','7574442121',NULL,'[email protected]','Y','11-SEP-2012');
INSERT INTO dd_project
VALUES (500,'Elders Assistance League', '01-SEP-2012','31-OCT-2012',15000,'Shawn
Hasee');
INSERT INTO dd_project
VALUES (501,'Community food pantry #21 freezer equipment', '01-OCT-2012','31-DEC-
2012',65000,'Shawn Hasee');
INSERT INTO dd_project
VALUES (502,'Lang Scholarship Fund', '01-JAN-2013','01-NOV-2013',100000,'Traci
Brown');
INSERT INTO dd_project
VALUES (503,'Animal shelter Vet Connect Program', '01-DEC-2012','30-MAR-
2013',25000,'Traci Brown');
INSERT INTO dd_project
VALUES (504,'Shelter Share Project 2013', '01-FEB-2013','31-JUL-2013',35000,'Traci
Brown');
INSERT INTO dd_status
VALUES (10,'Open');
INSERT INTO dd_status
VALUES (20,'Complete');
INSERT INTO dd_status
VALUES (30,'Overdue');
INSERT INTO dd_status
VALUES (40,'Closed');
INSERT INTO dd_status
VALUES (50,'Hold');
INSERT INTO dd_pledge
VALUES (100,303,'18-SEP-2012',80,500,20,NULL,0,738,'Y');
INSERT INTO dd_pledge
VALUES (101,304,'21-SEP-2012',35,500,20,NULL,0,738,'Y');
INSERT INTO dd_pledge
VALUES (102,310,'01-OCT-2012',500,501,20,NULL,0,749,'Y');
INSERT INTO dd_pledge
VALUES (103,307,'03-OCT-2012',2000,501,20,NULL,0,749,'N');
INSERT INTO dd_pledge
VALUES (104,308,'04-OCT-2012',240,501,10,NULL,12,749,'Y');
INSERT INTO dd_pledge
VALUES (105,309,'08-OCT-2012',120,501,10,NULL,12,749,'Y');
INSERT INTO dd_pledge
VALUES (106,301,'12-OCT-2012',75,500,20,NULL,0,738,'N');
INSERT INTO dd_pledge
VALUES (107,302,'15-OCT-2012',1200,501,10,NULL,24,749,'Y');
INSERT INTO dd_pledge
VALUES (108,308,'20-JAN-2013',480,503,10,NULL,24,790,'N');
INSERT INTO dd_pledge
VALUES (109,301,'01-FEB-2013',360,503,10,NULL,12,790,'N');
INSERT INTO dd_pledge
VALUES (110,303,'01-MAR-2013',300,504,10,NULL,12,756,'N');
INSERT INTO dd_pledge
VALUES (111,306,'01-MAR-2013',1500,504,20,NULL,0,756,'Y');
INSERT INTO dd_pledge
VALUES (112,309,'16-MAR-2013',240,504,10,NULL,12,756,'N');
INSERT INTO dd_payment
VALUES (1425,100,80,'18-SEP-2012','CC');
INSERT INTO dd_payment
VALUES (1426,101,35,'21-SEP-2012','DC');
INSERT INTO dd_payment
VALUES (1427,102,500,'01-OCT-2012','CH');
INSERT INTO dd_payment
VALUES (1428,103,2000,'03-OCT-2012','CH');
INSERT INTO dd_payment
VALUES (1429,106,75,'12-OCT-2012','CC');
INSERT INTO dd_payment
VALUES (1430,104,20,'01-NOV-2012','CC');
INSERT INTO dd_payment
VALUES (1431,105,10,'01-NOV-2012','CC');
INSERT INTO dd_payment
VALUES (1432,107,50,'01-NOV-2012','CC');
INSERT INTO dd_payment
VALUES (1433,104,20,'01-DEC-2012','CC');
INSERT INTO dd_payment
VALUES (1434,105,10,'01-DEC-2012','CC');
INSERT INTO dd_payment
VALUES (1435,107,50,'01-DEC-2012','CC');
INSERT INTO dd_payment
VALUES (1436,104,20,'01-JAN-2013','CC');
INSERT INTO dd_payment
VALUES (1437,105,10,'01-JAN-2013','CC');
INSERT INTO dd_payment
VALUES (1438,107,50,'01-JAN-2013','CC');
INSERT INTO dd_payment
VALUES (1439,104,20,'01-FEB-2013','CC');
INSERT INTO dd_payment
VALUES (1440,105,10,'01-FEB-2013','CC');
INSERT INTO dd_payment
VALUES (1441,107,50,'01-FEB-2013','CC');
INSERT INTO dd_payment
VALUES (1442,108,20,'01-FEB-2013','CC');
INSERT INTO dd_payment
VALUES (1443,109,30,'01-FEB-2013','CC');
INSERT INTO dd_payment
VALUES (1444,104,20,'01-MAR-2013','CC');
INSERT INTO dd_payment
VALUES (1445,105,10,'01-MAR-2013','CC');
INSERT INTO dd_payment
VALUES (1446,107,50,'01-MAR-2013','CC');
INSERT INTO dd_payment
VALUES (1447,108,20,'01-MAR-2013','CC');
INSERT INTO dd_payment
VALUES (1448,109,30,'01-MAR-2013','CC');
INSERT INTO dd_payment
VALUES (1449,110,25,'01-MAR-2013','CC');
INSERT INTO dd_payment
VALUES (1450,111,1500,'01-MAR-2013','CH');
INSERT INTO dd_payment
VALUES (1451,104,20,'01-APR-2013','CC');
INSERT INTO dd_payment
VALUES (1452,105,10,'01-APR-2013','CC');
INSERT INTO dd_payment
VALUES (1453,107,50,'01-APR-2013','CC');
INSERT INTO dd_payment
VALUES (1454,108,20,'01-APR-2013','CC');
INSERT INTO dd_payment
VALUES (1455,109,30,'01-APR-2013','CC');
INSERT INTO dd_payment
VALUES (1456,110,25,'01-APR-2013','CC');
INSERT INTO dd_payment
VALUES (1457,112,20,'01-APR-2013','CC');
INSERT INTO dd_payment
VALUES (1458,104,20,'01-MAY-2013','CC');
INSERT INTO dd_payment
VALUES (1459,105,10,'01-MAY-2013','CC');
INSERT INTO dd_payment
VALUES (1460,107,50,'01-MAY-2013','CC');
INSERT INTO dd_payment
VALUES (1461,108,20,'01-MAY-2013','CC');
INSERT INTO dd_payment
VALUES (1462,109,30,'01-MAY-2013','CC');
INSERT INTO dd_payment
VALUES (1463,110,25,'01-MAY-2013','CC');
INSERT INTO dd_payment
VALUES (1464,112,20,'01-MAY-2013','CC');
COMMIT;
OriginalL'auteur MeachamRob | 2013-04-25
Vous devez vous connecter pour publier un commentaire.
Puisque vous utilisez la valeur de la séquence dans l'instruction insert,
il n'est pas nécessaire de le sélectionner en tant que ci-dessous.
Aussi, vous avez manqué les deux points dans cette ligne,
EDIT: encore Une chose, il n'y a aucun point en ayant DBMS_OUTPUT déclaration sur le déclencheur. Depuis que vous avez l'habitude de le voir, même si l'exécution atteint.
Êtes-vous sûr que vous avez utilisé la bonne clause where? Je ne vois pas de paiement id 1470 dans les instructions d'insertion.
Vous avez raison, en regardant à travers les données montrent pas de déclarations de 1470, je suppose que je dois créer ces instructions insert, update et delete moi-même. Le Professeur n'a pas expliquer la partie trop bien
Merci Il fonctionne maintenant, après l'ajout de ceux insert, delete et update. Je vous remercie de votre réponse rapide à ma question et votre temps aujourd'hui.
OriginalL'auteur Noel
PL/SQL pour déclencher après insert, update, delete, qui saisit des Données dans la Table des Journaux avec une Séquence
OriginalL'auteur VISHAL KHALASI