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 :

Problème Insert PL/SQL


Sujet :

PL/SQL Oracle

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 9
    Par défaut Problème Insert PL/SQL
    Bonjour,

    Voila j'ai réaliser la requete suivante en pl/Sql le pb c'est que l'insertion ne se fait pas... Quelqu'un a une idée ?

    Merci...

    Requete :

    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    DECLARE
    CURSOR RowsToInsert IS
        SELECT distinct etape, rp.famille, substr(RC.blabla,6,2)  from recette RC, Produit rp
        WHERE RC.nom = rp.nom
        AND rp.famille like 'Gateau%'
        AND substr(rc.blabla,7,1) NOT IN ('U', 'J')
          ;
          sSql VARCHAR2(4000);
     
    BEGIN
     
            FOR cur IN RowsToInsert LOOP
              BEGIN
                          sSql := 'INSERT INTO ETAPE_REF_TABLE ( etape, famille, cuisson, eqt, degres) ';
                          sSql := sSql || 'VALUES (' || cur.etape || ',' || cur.famille || ', NULL, NULL, NULL ) ' ;
                          sSql := sSql || 'WHERE NOT EXISTS (SELECT 1 FROM ETAPE_REF_TABLE WHERE etape = ''' || cur.etape''' );' ;
                          DBMS_OUTPUT.Put_Line('Requête a exécuter : ' || sSql);
                          ExecSQL (sSql);
                          ssql :='';
              END;  
            END LOOP;
     
     
    END;
    La procédure stoquée ExecSQL (s as string) fonctionne très bien car d'autre personnes s'en servent.

    En gros ma requete revient a faire ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    INSERT INTO ETAPE_REF_TABLE 
     
    (ETAPE,FAMILLE,Cuisson,eqt,degres)
     
    VALUES ('Casse Oeuf,'gateau',NULL,NULL,NULL) WHERE NOT EXISTS ( SELECT 1 FROM ETAPE_REF_TABLE WHERE STAGE='Casse Oeuf'
     
    );
    Il me dit que la commande ne s'est pas terminée correctement. Je vois pas trop le problème sachant que je veux insérer dans cette table cet élément si il n'existe pas...

    Si quelqu'un peut m'aider dans mon avancé merci d'avance...

  2. #2
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Février 2008
    Messages
    224
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2008
    Messages : 224
    Par défaut
    Bonjour,

    Que contient ta procédure ExecSql ? Utilises-tu le SQL Dynamique ?

    Pour tester vraiment ton bloc PL/SQL, enlève ton appel à ta procédure et fais un Execute immediate :

    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
    16
    17
    18
    19
    20
    21
    22
    DECLARE
    CURSOR RowsToInsert IS
    SELECT distinct etape, rp.famille, substr(RC.blabla,6,2) from recette RC, Produit rp
    WHERE RC.nom = rp.nom
    AND rp.famille like 'Gateau%'
    AND substr(rc.blabla,7,1) NOT IN ('U', 'J')
    ;
    sSql VARCHAR2(4000);
     
    BEGIN
     
    FOR cur IN RowsToInsert 
    LOOP
     
    sSql := 'INSERT INTO ETAPE_REF_TABLE ( etape, famille, cuisson, eqt, degres) ';
    sSql := sSql || 'VALUES (' || cur.etape || ',' || cur.famille || ', NULL, NULL, NULL ) ' ;
    sSql := sSql || 'WHERE NOT EXISTS (SELECT 1 FROM ETAPE_REF_TABLE WHERE etape = ''' || cur.etape''' );' ;
    DBMS_OUTPUT.Put_Line('Requête a exécuter : ' || sSql);
    EXECUTE IMMEDIATE sSql;
    ssql :='';
    END LOOP;
    END;
    De plus tu as un END et un BEGIN en trop.

    PS: Utilise les balises codes car c'est dur à déchiffrer !!!

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

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    c'est pas plus simple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    INSERT INTO ETAPE_REF_TABLE ( etape, famille, cuisson, eqt, degres)
    (
       SELECT DISTINCT etape, rp.famille, substr(RC.blabla,6,2)  FROM recette RC, produit rp
        WHERE RC.nom = rp.nom
        AND rp.famille LIKE 'Gateau%'
        AND substr(rc.blabla,7,1) NOT IN ('U', 'J')
        AND etape NOT IN (SELECT etape FROM ETAPE_REF_TABLE)
    )

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    139
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Février 2006
    Messages : 139
    Par défaut
    Bonjour,

    VALUES ('Casse Oeuf,'gateau',NULL,NULL,NULL)
    il manque des apostrophes dans ton execute pour encadrer les String(comme dans ta clause where)

    Cdt

  5. #5
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Par défaut
    essaye avec des guillemets si etape et famille sont des strings.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    sSql := sSql || 'VALUES (''' || cur.etape || ''',''' || cur.famille || ''', 
    NULL, NULL, NULL ) ' ;
    PS: kervoaz, tu as été plus rapide

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    139
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Février 2006
    Messages : 139
    Par défaut
    mais moins précis.
    c'est l'habitude du boulot: faire vite et pas cher

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 9
    Par défaut
    Merci a tous j'essaierai ca demain ^^ merci encore !!

Discussions similaires

  1. [AC-2013] Problème Insertion sur SQL server (WebApp)
    Par clickandgo dans le forum Projets ADP
    Réponses: 0
    Dernier message: 16/01/2015, 20h11
  2. [AC-2010] Problème insert mémo sql & vba
    Par JordanITDev dans le forum VBA Access
    Réponses: 2
    Dernier message: 24/01/2014, 11h25
  3. Problème Insertion BDD SQL Server
    Par drake56 dans le forum C#
    Réponses: 13
    Dernier message: 19/07/2011, 11h20
  4. [MySQL] Problème insertion base SQL
    Par rouly dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 01/06/2010, 08h14
  5. Réponses: 4
    Dernier message: 30/01/2005, 14h23

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