[PL/SQL] LIKE, LENGTH et autres instructions....

LIKE, LENGTH et autres instructions.... [PL/SQL] - SQL/NoSQL - Programmation

Marsh Posté le 28-08-2003 à 16:46:13    

Voilà je suis tjrs sur mon script PL/SQL...
 
Dans celui je veux faire une requete avec un
LENGTH()
 
ou alors avec un
LIKE '__'
 
 
Ces requetes fonctionnent seules (en sql)...
Mais lorsque je les imbrique dans un bloc PL/SQL, elles ne ramènent aucun résultat !!!!
 
 
Est-ce que ce type d'erreur vous rapelle quelque chose ???
 
 
 
Ca m'arrangerait.... :/
 
 
NB : Je suis sur une base Oracle....

Reply

Marsh Posté le 28-08-2003 à 16:46:13   

Reply

Marsh Posté le 28-08-2003 à 16:57:16    

liengy a écrit :

Voilà je suis tjrs sur mon script PL/SQL...
 
Dans celui je veux faire une requete avec un
LENGTH()
 
ou alors avec un
LIKE '__'
 
 
Ces requetes fonctionnent seules (en sql)...
Mais lorsque je les imbrique dans un bloc PL/SQL, elles ne ramènent aucun résultat !!!!
 
 
Est-ce que ce type d'erreur vous rapelle quelque chose ???
 
 
 
Ca m'arrangerait.... :/
 
 
NB : Je suis sur une base Oracle....


Montre ton code, sinon, on ne pourra pas  dire grand chose je le crains ...


---------------
Gérez votre collection de BD en ligne ! ---- Electro-jazzy song ---- Dazie Mae - jazzy/bluesy/cabaret et plus si affinité
Reply

Marsh Posté le 28-08-2003 à 17:03:14    

Code :
  1. DECLARE
  2.   -- Récupération de la table tmp_secteur :
  3.   cursor cur_tmp_secteur1 is
  4.    select TSECT_CODE_POSTAL,
  5.            TSECT_LIBELLE_COMMUNE,
  6.            TSECT_CODE_AGENCE,
  7.            TSECT_ZONE_VAM,
  8.            TSECT_CODETARIFVAM,
  9.            TSECT_AUTORISATION,
  10.            SUBSTR(TSECT_ID_CODETARIFVAM, 3, 5) AS TSECT_ID_CODETARIF,
  11.            TSECT_CORRECTIF,
  12.            TSECT_ID_CORRECTIF
  13.       from TMP_SECTEUR
  14.   where TRIM(TSECT_CODE_POSTAL) LIKE '__';
  15. BEGIN
  16.   -- Suppression de toutes les lignes dans les tables à modifier :
  17.   --TRUNCATE TABLE correctif REUSE STORAGE;
  18.   --TRUNCATE TABLE zone_geo REUSE STORAGE;   
  19.   DELETE FROM correctif;
  20.   DELETE FROM zone_geo;
  21.  
  22.   for cur_tmp_secteur_rec1 in cur_tmp_secteur1 loop
  23. -- Mise à jour de COMMUNE :
  24.     UPDATE commune
  25.        SET COM_AUTORISATION = cur_tmp_secteur_rec1.TSECT_AUTORISATION, COM_ID_CODESTARIF_VAM = cur_tmp_secteur_rec1.TSECT_ID_CODETARIF
  26.      WHERE com_code_postal LIKE cur_tmp_secteur_rec1.TSECT_CODE_POSTAL || '%' ;
  27. COMMIT;
  28.   end loop;
  29. END;


 
 
Si je ne l'avais pas mis, c que la requete SELECT autant que la requete INSERT fonctionne hors du bloc SQL.... :/
 
Je ne pense donc pas que ça vienne du code...

Reply

Marsh Posté le 28-08-2003 à 17:24:35    

liengy a écrit :

Code :
  1. DECLARE
  2.   -- Récupération de la table tmp_secteur :
  3.   cursor cur_tmp_secteur1 is
  4.    select TSECT_CODE_POSTAL,
  5.            TSECT_LIBELLE_COMMUNE,
  6.            TSECT_CODE_AGENCE,
  7.            TSECT_ZONE_VAM,
  8.            TSECT_CODETARIFVAM,
  9.            TSECT_AUTORISATION,
  10.            SUBSTR(TSECT_ID_CODETARIFVAM, 3, 5) AS TSECT_ID_CODETARIF,
  11.            TSECT_CORRECTIF,
  12.            TSECT_ID_CORRECTIF
  13.       from TMP_SECTEUR
  14.   where TRIM(TSECT_CODE_POSTAL) LIKE '__';
  15. BEGIN
  16.   -- Suppression de toutes les lignes dans les tables à modifier :
  17.   --TRUNCATE TABLE correctif REUSE STORAGE;
  18.   --TRUNCATE TABLE zone_geo REUSE STORAGE;   
  19.   DELETE FROM correctif;
  20.   DELETE FROM zone_geo;
  21.  
  22.   for cur_tmp_secteur_rec1 in cur_tmp_secteur1 loop
  23. -- Mise à jour de COMMUNE :
  24.     UPDATE commune
  25.        SET COM_AUTORISATION = cur_tmp_secteur_rec1.TSECT_AUTORISATION, COM_ID_CODESTARIF_VAM = cur_tmp_secteur_rec1.TSECT_ID_CODETARIF
  26.      WHERE com_code_postal LIKE cur_tmp_secteur_rec1.TSECT_CODE_POSTAL || '%' ;
  27. COMMIT;
  28.   end loop;
  29. END;


 
 
Si je ne l'avais pas mis, c que la requete SELECT autant que la requete INSERT fonctionne hors du bloc SQL.... :/
 
Je ne pense donc pas que ça vienne du code...


Ben au niveau du select, déjà, ça me parait pas terrible ton like '___' ... autant mettre = '___', ce que tu veux est peut être plutot like '___%', non ?
Quand au code, je ne sais pas quelle est ta version d'Oracle, mais pour parcourir un curseur, d'habitude, je commence à l'ouvrir via Open mon_curseur.
exemple :
OPEN mon_curseur;
LOOP
FETCH mon_curseur INTO variable_qui_va_bien;
EXIT WHEN curs_offre%NOTFOUND;
[des bidules à faire pendant ce temps là]
end loop;
close mon_curseur;
 
Mais, bon, y a sans doute des trucs que je connais pas en PL/SQL.


---------------
Gérez votre collection de BD en ligne ! ---- Electro-jazzy song ---- Dazie Mae - jazzy/bluesy/cabaret et plus si affinité
Reply

Marsh Posté le 28-08-2003 à 17:29:59    

En faisant de la meme facon sans que ce soit qu'il est une clause where dans mon select, et avec un insert à la place du update (sur une autre table), ça fonctionne sans ouvrir mes curseur...
 
Mais je vais essayé avec le =, mais je croyais que le carctère '_' était réservé à l'instruction LIKE... :/

Reply

Marsh Posté le 28-08-2003 à 17:59:26    

Le caractère '_' fonctionne bien uniquement avec l'instruction LIKE....
 
En revanche, j'ai bien trouvé mon pb...
 
Il s'agissait en fait d'un TRIM manquant...
Ce qui ne dérange pas dans une requete SQL simple, mais bien souvent dans du code.... :/
 
Merci kan meme... :jap:

Reply

Marsh Posté le 28-08-2003 à 18:17:45    

liengy a écrit :

Le caractère '_' fonctionne bien uniquement avec l'instruction LIKE....
 


 [:aaah] ça, ça m'etonne carément ... je bosse avec Oracle depuis 3 ans et j'ai jamais eu de problème avec le caractère '_' ... bizarre ...


---------------
Gérez votre collection de BD en ligne ! ---- Electro-jazzy song ---- Dazie Mae - jazzy/bluesy/cabaret et plus si affinité
Reply

Marsh Posté le 29-08-2003 à 09:31:57    

tomlameche a écrit :


 [:aaah] ça, ça m'etonne carément ... je bosse avec Oracle depuis 3 ans et j'ai jamais eu de problème avec le caractère '_' ... bizarre ...  

J'en suis désolée.... Mais sur ma base, la requete :  

Code :
  1. select TSECT_CODE_POSTAL,
  2.            TSECT_LIBELLE_COMMUNE,
  3.            TSECT_CODE_AGENCE,
  4.            TSECT_ZONE_VAM,
  5.            TSECT_CODETARIFVAM,
  6.            TSECT_AUTORISATION,
  7.            SUBSTR(TSECT_ID_CODETARIFVAM, 3, 5) AS TSECT_ID_CODETARIF,
  8.            TSECT_CORRECTIF,
  9.            TSECT_ID_CORRECTIF
  10.       from TMP_SECTEUR
  11.   where TRIM(TSECT_CODE_POSTAL) = '__'


ne renvoie aucun résultat,
 
tandis que celle-ci :

Code :
  1. select TSECT_CODE_POSTAL,
  2.            TSECT_LIBELLE_COMMUNE,
  3.            TSECT_CODE_AGENCE,
  4.            TSECT_ZONE_VAM,
  5.            TSECT_CODETARIFVAM,
  6.            TSECT_AUTORISATION,
  7.            SUBSTR(TSECT_ID_CODETARIFVAM, 3, 5) AS TSECT_ID_CODETARIF,
  8.            TSECT_CORRECTIF,
  9.            TSECT_ID_CORRECTIF
  10.       from TMP_SECTEUR
  11.   where TRIM(TSECT_CODE_POSTAL) LIKE '__'


en renvoie 127.... [:spamafote]


Message édité par liengy le 29-08-2003 à 09:33:10
Reply

Marsh Posté le 29-08-2003 à 09:59:30    

C'est dingue ça, j'ai fait l'essai juste pour voir, et j'ai aucun problème avec '_' sous une version 8.1.7.4
Tu as quelle version d'Oracle ? ( je déteste ne pas comprendre l'origine d'une telle absurdité  [:mmmfff] )


---------------
Gérez votre collection de BD en ligne ! ---- Electro-jazzy song ---- Dazie Mae - jazzy/bluesy/cabaret et plus si affinité
Reply

Marsh Posté le 02-09-2003 à 14:00:47    

Je ne vais pas pouvoir te renseigner bcp.... Car ct pour un job d'été, et ça se terminait vendredi....
 
tous cee que je sais c que ct une version 8.1, mais je ne connais pas la version plus précisemment... dsl... :/

Reply

Marsh Posté le 02-09-2003 à 14:00:47   

Reply

Marsh Posté le 11-09-2003 à 11:14:13    

les caractères _ ne sont ils pas permis que sur invocation d'un LIKE ?
 
Pour la façon de balayer ton curseur c'est la bonne solution.
la solution donnée + haut avec Open Cursor est carrément obsolète en ORACLE 8

Reply

Marsh Posté le 11-09-2003 à 11:31:52    

Citation :

la solution donnée + haut avec Open Cursor est carrément obsolète en ORACLE 8


Merci du renseignement, j'ai pris cette habitude sous Oracle 7.3 et je n'ai jamais remis en question cette technique.
C'est clair que cette syntaxe est plus simple.


---------------
Gérez votre collection de BD en ligne ! ---- Electro-jazzy song ---- Dazie Mae - jazzy/bluesy/cabaret et plus si affinité
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed