IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PL/SQL Oracle Discussion :

PL/SQL: ORA-00984: Un nom de colonne n'est pas autorisé ici


Sujet :

PL/SQL Oracle

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 33
    Points : 25
    Points
    25
    Par défaut PL/SQL: ORA-00984: Un nom de colonne n'est pas autorisé ici
    BONJOUR A TOUS
    voila mon pb

    j'ai deux tables

    la premiere permet d'inserer des données type commandes ( table de test )

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    CREATE TABLE  "CMD" 
       (	"NUM_CMD" VARCHAR2(4) NOT NULL ENABLE, 
    	"ID_CMD" VARCHAR2(50) NOT NULL ENABLE, 
    	"DATE_CMD" DATE NOT NULL ENABLE
       )
    /
    la deuxieme est une table de session

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    CREATE TABLE  "SESSION_ENTREE" 
       (	"TYPE_ENTREE" VARCHAR2(50) NOT NULL ENABLE, 
    	"TIMESTAMP" VARCHAR2(50) NOT NULL ENABLE, 
    	"DATE_ENTREE" DATE NOT NULL ENABLE
       )
    /
    j'ai crée un trigger sur ma table CMD qui insere a chaque ligne, une ligne sur ma table SESSION_ENTREE


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    CREATE OR REPLACE TRIGGER  "CMD_T1" 
    AFTER
    insert or update or delete on "CMD"
    begin
    INSERT INTO SESSION_ENTREE 
    (TYPE_ENTREE,TIMESTAMP,DATE_ENTREE) 
    VALUES 
    ('CMD',CURRENT_TIMESTAMP,NEW.DATE_CMD);
     
    end;
    /
    le probleme est que je voudrai récupérer le champs DATE_CMD de la derniere ligne inseré et via ma requete l'insérer dans mon champs DATE_ENTREE

    oracle m'envoie le message d'erreur suivant :
    PL/SQL: ORA-00984: Un nom de colonne n'est pas autorisé ici
    please help me

  2. #2
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 075
    Points
    19 075
    Par défaut
    CURRENT_TIMESTAMP est une colonne ? C'est pas plutôt SYSDATE que tu veux mettre ?

    NEW.DATE_CMD :NEW.DATE_CMD il manque les :

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 33
    Points : 25
    Points
    25
    Par défaut merci de cette reponse ultra rapide
    CURRENT_TIMESTAMP me permet de dater precisément mon insertion de ligne, tandis que NEW.DATE_CMD est la date inséré dans ma table CMD ce n'est pas la date courante que je souhaite entrer, mais bien la date de la derniere ligne inséré dans ma table CMD. j'ai bien essayé de rajouter les : mais maleureusement exactement le même message d'erreur.

    alors j'ai pensé declarer une variable type date avec un code dans ce style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    CREATE OR REPLACE TRIGGER  "CMD_T1" 
    AFTER
    insert or update or delete on "CMD" 
     
    DECLARE 
    date_cmd_new DATE; 
    date_cmd_new:= NEW.DATE_CMD;
     
    begin 
     
    INSERT INTO SESSION_ENTREE 
    (TYPE_ENTREE,TIMESTAMP,DATE_ENTREE) 
    VALUES 
    ('CMD',CURRENT_TIMESTAMP,date_cmd_new);
    end;
    mais pas mieux tjs sans resultat.

    est ce que NEW.DATE_CMD correspond bien à ce que je veux? (c-a-d a la date de ma derniere insertion dans la table CMD) ou alors j'y suis pas du tout

  4. #4
    Membre expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Points : 3 609
    Points
    3 609
    Par défaut
    Tu ne peux pas utiliser :new dans un trigger qui n'est pas "for each row"

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 33
    Points : 25
    Points
    25
    Par défaut chapeau plaineR
    un grand merci !!! j'ai juste rajouté " for each row " et ça marche impéc en effet tu porte bien ton titre d'expert senior confirmé je confirme lol

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 5
    Dernier message: 21/09/2009, 03h03
  2. SQL Loader + CSV (sans noms de colonne) + clause WHEN
    Par surfman dans le forum SQL*Loader
    Réponses: 5
    Dernier message: 10/09/2009, 14h15
  3. [SSIS][2k5]Les noms de colonnes ne sont pas autorisés.
    Par clementratel dans le forum SSIS
    Réponses: 0
    Dernier message: 27/02/2008, 11h17
  4. Query SQL sans connaitre les noms de colonnes
    Par lem01 dans le forum JDBC
    Réponses: 9
    Dernier message: 12/07/2007, 15h55
  5. [VBA-E] Verifier qu'un nom de feuille n'est pas utilisé
    Par Elstak dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 31/03/2006, 09h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo