0
votes

Oracle Pls-00049: Mauvaise variable de liaison

Je reçois cette erreur lorsque j'essaie de créer ce déclencheur. J'ai tout essayé mais je ne sais pas ce qui semble être le problème.

Voici le code: p> xxx pré>

et l'erreur est: p>

CREATE TABLE Item (
    Item_Id int PRIMARY KEY,
    Menu_Id int,
    Name varchar2(20),
    Description varchar2(120),
    Price int,
    FOREIGN KEY(Menu_Id) REFERENCES Menu(Menu_Id)
);

CREATE TABLE OrderRecord (
    OrderRecord_Id int PRIMARY KEY,
    Item_Id int,
    Employee_Id int,
    Reservation_Id int,
    Order_Time date,
    Quantity int,
    TotalPrice int,
    FOREIGN KEY(Item_Id)References Item(Item_Id),
    FOREIGN KEY(Employee_Id)References Employee(Employee_Id),
    FOREIGN KEY(Reservation_Id)References Reservation(Reservation_Id)
);


0 commentaires

3 Réponses :


0
votes

Le tableau de la tableRecord n'est pas mis à jour: vous ne pouvez pas faire référence à une valeur ancienne pour ce tableau; Vous devez lire cette valeur avec une instruction SELECT.

IF :OLD.price <> :new.price THEN
   new_totalprice := <Quantity> * :new.price;


0 commentaires

0
votes

Il n'y a pas de colonne Quantité dans le tableau élément sur lequel vous appliquez la gâchette.


0 commentaires

0
votes

Si je comprends ce que vous voulez bien faire correctement, on dirait que vous souhaitez mettre à jour le prix total calculé de tous les entrées de commande code> checkrecord code> lorsqu'un élément élément code> a un Changement de prix.

CREATE OR REPLACE TRIGGER after_price_update
AFTER UPDATE
ON Item
FOR EACH ROW
BEGIN
  IF NVL(:OLD.Price, 0) <> NVL(:new.Price, 0) THEN
    -- Update the child table "OrderRecord" for this item using new price
    UPDATE OrderRecord SET TotalPrice = Quantity * :new.Price WHERE Item_Id = :new.Item_id;
  END IF;
END;


0 commentaires