PL/SQL qui kaput [SGBD] - SQL/NoSQL - Programmation
Marsh Posté le 20-08-2004 à 16:10:26
Salut !
ben déjà 2 choses : je vois pas trop l'intéret d'un curseur alors que tu prends rownum=1, mais bon pourquoi pas. Ensuite dans le curseur il n'y a pas besoin de paramètres puisqu'ils ne sont pas utilisés dans la requête...
Donc j'écrirais ca comme ca:
declare myvar varchar2(30) ;
myvar2 varchar2(4000);
cursor cur_vue
is
select rpad(view_name,30,' ') , text From all_views
where rownum = 1 ;
begin
open cur_vue;
fetch cur_vue into myvar,myvar2;
loop
exit when cur_vue%notfound;
insert into vuesql values (myvar,myvar2);
fetch cur_vue into myvar,myvar2;
end loop;
end;
et là, ca devrait mieux marcher...
Marsh Posté le 20-08-2004 à 16:21:10
on peut aussi faire :
Code :
|
Marsh Posté le 20-08-2004 à 16:47:02
toutafé !
mais si le but était de faire un bloc PL/SQL, ben là c'est raté...
Marsh Posté le 20-08-2004 à 18:07:27
jielbi a écrit : Salut ! |
Le rownum = 1 est là parceque la requête est loin d'être finie, c'est en cours d'écriture, et vu que ça merde d'entrée, il n'est pas allé plus loin
jielbi a écrit : Donc j'écrirais ca comme ca: |
OK, je lui dit de tenter cette syntaxe. A priori, son code n'a pas sauté aux yeux d'un DBA ici, donc ça faisait la même chose (sans passer par le fetch)
A noter que le "text" est de type "LONG", et c'est ça qui merde en fait (vous pouvez tester, c'est une table système d'Oracle)
Marsh Posté le 20-08-2004 à 18:08:38
Beegee a écrit : on peut aussi faire :
|
Ouais mais nan justement, c'est la merde, parcequ'il faut qu'il recherche dans "text" des noms de champs lors d'un filtre.
Hors le LONG ne supporte pas le like.
L'idée est donc de passer le LONG en plusieurs VARCHAR2(4000) et faire des like dedans. Recopier "bêtement" d'un long vers un autre, ça sert à rien, autant faire une vue
Marsh Posté le 20-08-2004 à 12:38:16
Oralce 8
J'ai un collègue qui tente de faire un PL tout bête pour recopier des champs d'une table dans une autre.
Et ça merde, et il ne sais pas pourquoi. Moi, le PL/SQL, j'y connais que dalle, et le peux que j'en ai vu, je préfère le T-SQL (hé oui, même M$ arrive à faire un langage pourtant dérivé du VB qui est moins merdique, c'est pour dire)
declare myvar varchar2(30) ;
myvar2 varchar2(4000);
cursor cur_vue (name varchar2,text long)
is
select rpad(view_name,30,' ') , text From all_views
where rownum = 1 ;
begin
for enreg_vue in cur_vue
loop
myvar := enreg_vue.name ;
myvar2 := enreg_vue.text ;
insert into vuesql values (myvar,myvar2);
end loop;
end;
L'erreur :
The following error has occurred:
ORA-06550: line 8, column 18:
PLS-00306: wrong number or types of arguments in call to 'CUR_VUE'
ORA-06550: line 8, column 1:
PL/SQL: Statement ignored