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>