Précédent   Forum des professionnels en informatique > Bases de données > Oracle > PL/SQL
PL/SQL Forum d'entraide sur le PL/SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 20/12/2010, 22h55   #1
Invité de passage
 
Inscription : décembre 2010
Messages : 4
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 4
Points : 0
Points : 0
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 :
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 :
1
2
3
4
CREATE TABLE RESULTAT (produits Varchar2(30)," WARD "
number(5,2)," MARTIN "  number(5,2))
 declare
*
ERREUR à la ligne 1 :
Citation:
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 :
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>
carteman est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2010, 23h49   #2
Modérateur
 
Homme Fabien
Ingénieur d'études en décisionnel
Inscription : septembre 2008
Messages : 5 684
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 34
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études en décisionnel
Secteur : Arts - Culture

Informations forums :
Inscription : septembre 2008
Messages : 5 684
Points : 10 463
Points : 10 463
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
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.
__________________
Email : http://scr.im/waldar
Waldar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/12/2010, 11h35   #3
McM
Expert Confirmé Sénior
 
Inscription : juillet 2003
Messages : 3 437
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 3 437
Points : 4 173
Points : 4 173
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 :
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
__________________
More Code : More Bugs. Less Code : Less Bugs
McM est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 06h17.


 
 
 
 
Partenaires

Hébergement Web