web-dev-qa-db-fra.com

PLSQL: NEW et: OLD

Quelqu'un peut-il m'aider à comprendre quand utiliser :NEW et :OLD dans des blocs PLSQL, je trouve très difficile de comprendre leur utilisation.

21
Pravin

Vous utilisez normalement les termes d'un trigger en utilisant :old pour référencer l'ancienne valeur et :new pour référencer la nouvelle valeur.

Voici un exemple de la documentation Oracle liée à ci-dessus

CREATE OR REPLACE TRIGGER Print_salary_changes
  BEFORE DELETE OR INSERT OR UPDATE ON Emp_tab
  FOR EACH ROW
WHEN (new.Empno > 0)
DECLARE
    sal_diff number;
BEGIN
    sal_diff  := :new.sal  - :old.sal;
    dbms_output.put('Old salary: ' || :old.sal);
    dbms_output.put('  New salary: ' || :new.sal);
    dbms_output.put_line('  Difference ' || sal_diff);
END;

Dans cet exemple, le déclencheur déclenche BEFORE DELETE OR INSERT OR UPDATE:old.sal contient le salaire avant le déclenchement du déclencheur et :new.sal contiendra la nouvelle valeur.

28
GrahamA

: New et: Old Value peuvent être différenciés dans les instructions DML.
Insert -: Old = NULL: New = Nouvelle valeur insérée

Update -: Old = Valeur présente dans le tableau avant l'instruction Update déclenchée: New = Nouvelle valeur à mettre à jour 

Supprimer -: ancien = valeur avant suppression: nouveau = NULL

16
Gok

: old et: new sont des pseudo-enregistrements faisant référence à des données de niveau ligne lorsqu’un déclencheur de niveau ligne est utilisé.

  • : old - fait référence à l'ancienne valeur
  • : new - fait référence à New value

Pour l'opération ci-dessous, les anciennes et nouvelles valeurs respectives:

  1. INSERT-: old.value = NULL,: nouvelle valeur = post insert value
  2. DELETE-: old.value = Pre Supprimer la valeur,: nouvelle valeur = null
  3. UPDATE-: old.value = Valeur antérieure à la mise à jour,: nouvelle valeur = Post Update valeur

Par exemple:

CREATE OR REPLACE TRIGGER get_dept
  BEFORE DELETE OR INSERT OR UPDATE ON employees
  FOR EACH ROW
BEGIN
    DBMS_OUTPUT.PUT('Old Dept= ' || :OLD.dept|| ', ');
  DBMS_OUTPUT.PUT('New Dept= ' || :NEW.dept );
END;

Déclaration de déclenchement:

UPDATE employees
SET dept ='Accounts'
WHERE empno IN (101 ,105);
6
Uday Gupta

: new signifie la nouvelle valeur que vous essayez d'insérer:old signifie la valeur existante dans la base de données

4
Arun nath

: old est votre ancienne valeur:nouveau est votre nouvelle valeur,

il est utilisé beaucoup dans les déclencheurs, par exemple avec les champs Creation_Date & Modified_By

1
Jelman

: old et: new sont des pseudo-enregistrements auxquels il est fait référence lors de l'utilisation de déclencheurs au niveau des lignes.

•: old - fait référence à l'ancienne valeur •: new - fait référence à la nouvelle valeur

par exemple: 

CREATE OR REPLACE TRIGGER mytrig BEFORE
  INSERT OR
  UPDATE
    ON mytab FOR EACH ROW
BEGIN
  IF INSERTING THEN
    SELECT trunc(sysdate), trunc(sysdate) INTO :new.created, :NEW.last_updated FROM DUAL;
  END IF; --INSERTING

  IF UPDATING THEN

      SELECT trunc(sysdate) INTO :NEW.last_updated FROM DUAL;

  END IF; --UPDATING

END;

J'espère que cela explique le concept d'ancien et de nouveau.

1
Arjun

: new est la nouvelle valeur - Après le déclenchement du déclencheur, il s'agit de la valeur de la colonne. :nouvelle valeur

0
praveen muppala

New et Old plus pertinents pour l'opération de mise à jour à l'intérieur d'un déclencheur, pour récupérer l'ancienne valeur d'utilisation du champ old et pour la valeur récente

0
sudhirkondle