2017-10-13 17 views
1

J'essaye de créer mon trigger mais cela demande des binds à chaque fois. Il fonctionne comme je le veux quand je clique sur appliquer sur la fenêtre qui apparaît ... Cependant, il va enregistrer une erreur ...Oracle PL/SQL Trigger demandant des binds

Mon déclencheur vérifie si un client est actif et ne permet pas changements si elle se trouve être actif ...

CREATE Trigger Client_Activity 
BEFORE Insert or Update or Delete ON Client 
FOR EACH ROW 
DECLARE 
    VAR_AC char(2); 
BEGIN 
    IF UPDATING THEN 
     SELECT Activity INTO VAR_AC 
     FROM Client_Additionals 
     WHERE Activity = :Old.Activity; 

     IF Activity = 'AC' 
      THEN Raise_Application_Error(-20999, 'active') 
     END IF; 
END; 
/

ORACLE VERSION 12 UTILISATION sqldeveloper

+0

Mettez SET 'DEFONE OFF,' 'avant CREATE TRIGGER ....' déclaration, puis appuyez sur F5 'Run script' – krokodilko

+0

@a_horse_with_no_name - le même que dans tous les cas où le code a des variables de liaison. Les différentes extrémités avant le font différemment. SQL \ * Plus dira simplement * La variable Bind "OLD" n'est pas déclarée *. SQL Developer ouvrira une fenêtre pop-up, intitulée "Enter binds", en attendant une valeur pour "Old". Je crois que Toad va faire quelque chose de similaire à SQL Developer. – mathguy

+0

@krokodilko - Je ne pense pas que cela va guérir le problème ... Pourquoi le ferais-je? Le problème est une variable de liaison (accidentelle ou plutôt mal informée) et non une variable de substitution. – mathguy

Répondre

0

Vous avez deux erreurs de syntaxe dans votre déclencheur:

  1. Le IF manque un END IF
  2. Vous devez comparer le contenu de la variablesvar_ac
  3. Il vous manque un ; après la Raise_Application_Error()

Putting qui, ensemble, vous pouvez créer le déclencheur sans problème. Toutefois, vous devez utiliser le bouton "Exécuter le script" dans SQL Developer pour exécuter un bloc PL/SQL comme celui-ci.

enter image description here

SQL * Plus ne nécessite aucune manipulation particulière:

enter image description here