Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1504 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [SGBD] PL/SQL qui kaput

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[SGBD] PL/SQL qui kaput

n°827653
Arjuna
Aircraft Ident.: F-MBSD
Posté le 20-08-2004 à 12:38:16  profilanswer
 

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 :

Citation :

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

mood
Publicité
Posté le 20-08-2004 à 12:38:16  profilanswer
 

n°827886
jielbi
Posté le 20-08-2004 à 16:10:26  profilanswer
 

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... :D  
 
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... :)

n°827893
Beegee
Posté le 20-08-2004 à 16:21:10  profilanswer
 

on peut aussi faire :
 

Code :
  1. INSERT INTO vuesql
  2. (SELECT rpad(view_name,30,' ') , text
  3. FROM all_views 
  4. WHERE rownum = 1);


 
:D

n°827919
jielbi
Posté le 20-08-2004 à 16:47:02  profilanswer
 

toutafé ! :jap:  
mais si le but était de faire un bloc PL/SQL, ben là c'est raté... :whistle:  

n°827986
Arjuna
Aircraft Ident.: F-MBSD
Posté le 20-08-2004 à 18:07:27  profilanswer
 

jielbi a écrit :

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... :D  


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:
 
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... :)


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)

n°827987
Arjuna
Aircraft Ident.: F-MBSD
Posté le 20-08-2004 à 18:08:38  profilanswer
 

Beegee a écrit :

on peut aussi faire :
 

Code :
  1. INSERT INTO vuesql
  2. (SELECT rpad(view_name,30,' ') , text
  3. FROM all_views 
  4. WHERE rownum = 1);


 
:D


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 ;)


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [SGBD] PL/SQL qui kaput

 

Sujets relatifs
[SGBD][JAVA] Outils conception BD[mySql] Script SQL de création
[SGBD] Tip : Comment installer le client Oracle 10g sous WindowsSQL fonction conversion vers date
[SQL] Faire un update sur plusieurs critères provenant d'une tableSQL Access Erreur de Requete
[SQL SERVER] - Utiliser une variable locale dans un CURSOR (TSQL)Probléme Datatype image avec SQL server 2000
Requete SQL multi criteresConnexion sql server distante
Plus de sujets relatifs à : [SGBD] PL/SQL qui kaput


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR