Bonjour à tous,
Je souhaitait faire une procédure générique en pls-sql qui mes en majuscule toute les valeurs d'un champ d'une table. Je ne maîtrise pas bien les select dynamique.
Je écrit cette procédure sur isql *sql, mais c'est un peu difficile pour débogguer car je ne peux pas contrôler ce qu'il y a dans mes variable
dbms_outpu.put_line('.........') et print ne fonctionne pas....
La procédure arrive à se compiler, mais à l'exécution de cette procédure j'ai une erreur de type de boucle. Apparament ça boucle trop, Portant je récupère le nombre de d'enregistrement de la table. avec un count * de la table mais avec execute immediate je ne c'est pas ce qui me récupère dans mon into, j'avais mis un alias sur le count *, mais j'ai l'impression qui me recupère mal nbFila.
Voici ma procédure
ça compile bien mais quand j'exécute ça bugcreate or replace procedure campoMajusculo(tabla in varchar2, campo in varchar2)
is
reqContador varchar2(50);
reqSelect varchar2(50);
reqUpdate varchar2(50);
nbFila integer;
campoTabla varchar2(50);
Begin
reqContador := 'select count(*) as nbFila from ' || tabla ;
EXECUTE IMMEDIATE reqContador into nbFila;
// j'ai essayer aussi en commençant à 0, mais ça change rien,
//même message d'erreur à l'exécution
For fila in 1..nbFila
LOOP
reqSelect := 'select ' || campo || ' from ' || tabla;
EXECUTE IMMEDIATE reqSelect into campoTabla;
campoTabla := upper(campoTabla);
reqUpdate := 'update ' || tabla || 'set ' || campo || '=' || campoTabla;
EXECUTE IMMEDIATE reqUpdate;
END LOOP;
End;
begin
begin
campoMajusculo('Prueba','proyecto');
end;
*
ERROR en línea 1:
ORA-01422: la recuperación exacta devuelve un número mayor de filas que el solicitado
ORA-06512: en "DAV79.CAMPOMAJUSCULO", línea 23
ORA-06512: en línea 2
Je voudrais savoir si quelqu'un aurait une solution à mon problème, comment je peux vérifier ce qu'il y a dans le into.
Il y a t'il possibilité de construire un curseur de la même manière q'un select dynamique.
Mon problème est assez urgent, car je doit rendre un projet de base de donnée en ajoutant cette fonctionnalité.
ex : reqCur = 'curDyn CURSOR IS select ' || campo || ' from ' || tabla;
execute immediate into curDyn;
for fila in curDyn
loop
campo = fila.campo;
..........................;
end loop
Merci d'avance pour votre aide.
dav79
Partager