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 :

créer une table avec execute immediate et inserer des élément


Sujet :

PL/SQL Oracle

  1. #1
    Candidat au Club
    Inscrit en
    Décembre 2010
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 4
    Points : 4
    Points
    4
    Par défaut créer une table avec execute immediate et inserer des élément
    bonsoir tout le monde,
    j'ai besoin de votre aide les gars je me suis planté .....je n'arrive pas a trouvé l'erreur....au fait je veux récupérer les éléments d'un curseur et les mettre dans une table que je vais créer en même temps... voici le code:
    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
     
    --Question n° 3
     SET SERVEROUTPUT ON;
     drop table resultat;
     
     declare
     
    	Cursor curRepName is select Distinct empno,ename From ventes;
    	Cursor curDescrip is select Distinct design From ventes;
    	nomRep ventes.ename%TYPE;
    	Descrip ventes.design%TYPE;
    	qte ventes.litotal%TYPE;
    	numRep ventes.empno%type;
    	req_CreateTable varchar2(500);
    	req_Insert varchar2(500);
     
    Begin
     
    /* Debut de la requete pour creer la table */
    req_CreateTable:='CREATE TABLE RESULTAT (produits Varchar2(30)';
     
    Open curRepName;
    Loop
    	Fetch curRepName into numRep,nomRep;
    	Exit When curRepName%NOTFOUND;
    	--select distinct ename into v_nomEmp from ventes where empno=numEmp.empno;
    	req_CreateTable:=req_CreateTable || '," ' || nomRep || ' "  number(5,2)';
    End Loop;
    Close curRepName;
    req_CreateTable:=req_CreateTable || ')';
    /* Fin de la requete */
     
    EXECUTE IMMEDIATE req_CreateTable;
    dbms_output.put_line(req_CreateTable);
     
    /* Insertion des tuples */
     
    Open curDescrip;
    Loop
    	Fetch curDescrip into Descrip;
    	Exit When curDescrip%NOTFOUND;
    	req_Insert:='insert into resultat values ("' || Descrip || '"';
    	Open curRepName;
    	Loop
    		Fetch curRepName into numRep,nomRep;
    		Exit When curRepName%NOTFOUND;
    		Select sum(litotal) Into qte From ventes Where empno=numRep And design=Descrip;
    		req_Insert:=req_Insert||',"' || qte || '"';
    	End Loop;
    	Close curRepName;
    	req_Insert:=req_Insert||')';
    	EXECUTE IMMEDIATE req_Insert;
    	dbms_output.put_line(req_Insert);
    End Loop;
    Close curDescrip;
    End;
    /
    et voila ce qu'il m'affiche....
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    CREATE TABLE RESULTAT (produits Varchar2(30)," WARD "
    number(5,2)," MARTIN "  number(5,2))
     declare
    *
    ERREUR à la ligne 1 :
    ORA-01741: identificateur de longueur zéro interdit
    ORA-06512: à ligne 47
    si je mets l'instruction execute immediate en commentaire il me donne le resultat suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    CREATE TABLE RESULTAT (produits Varchar2(30)," WARD "  number(5,2)," ALLEN "
    number(5,2)," MARTIN "  number(5,2))
    insert into resultat values ("Escarpin", "" ,"13","")
    insert into resultat values ("Rangers", "" ,"","6")
    insert into resultat values ("basket", "" ,"2","")
    insert into resultat values ("soulier", "" ,"","2")
    insert into resultat values ("moccassin", "1" ,"2","")
    Procédure PL/SQL terminée avec succès.

    SQL>

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 391
    Points
    18 391
    Par défaut
    C'est pour un exercice ou un besoin réel ?
    Je n'ai pas d'Oracle sous la main, mais il est possible que le premier caractère d'un nom de colonne doive ne pas être un blanc.

  3. #3
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    La doc oracle dit que les noms de colonne quotés peuvent contenir tous les caractères (sauf le " et le chr(0) ).
    La création de la table marche, mais c'est l'insertion qui ne marche pas : une chaine de caractère est encadrée de simple quote pas de doubles

    Le doublequote sert aux noms d'objets (tables, colonnes, etc..), pas aux données.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    CREATE TABLE RESULTAT (produits Varchar2(30)," WARD "  number(5,2)," ALLEN " number(5,2)," MARTIN "  number(5,2));
    INSERT INTO resultat(produit, " WARD ", " ALLEN ", " MARTIN ") VALUES ('Escarpin', NULL ,13,NULL);
    PS : Mieux vaut toujours mettre les noms de colonne dans les INSERT

Discussions similaires

  1. Réponses: 3
    Dernier message: 16/04/2008, 08h39
  2. Réponses: 7
    Dernier message: 11/07/2007, 13h26
  3. créer une table avec interbase
    Par solidleon dans le forum Bases de données
    Réponses: 3
    Dernier message: 01/11/2006, 15h39
  4. [Conception] Créer une table avec php
    Par freezerhm dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 29/10/2006, 12h15
  5. Créer une table avec SELECT
    Par eric37 dans le forum Requêtes
    Réponses: 2
    Dernier message: 20/08/2006, 00h34

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