Bonjour,

j'essaye d'éviter un warning lorsque je recopie une table dans une autre, avec une petite conversion en route.

je dispose de deux tables :
* tab1("myid" : NUMBER(3), "mydate" : DATE)
* tab2("myid" : NUMBER(3), "mydate" : NUMBER(8)), où la date est sous forme YYYYMMDD

Je veux recopier tab2 vers tab1, j'ai donc une requête du type :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
INSERT INTO tab1(myid, mydate)
     SELECT myid, TODATE_(mydate, 'yyyymmdd') FROM tab2
Mais à la compilation, j'obtiens un warning plw-07202 : "le type bind entrainera la conversion à partir du type de la colonne".

D'après ce que j'ai compris, ce warning vise à éviter l'appel de fonctions à l'intérieur de requêtes SQL, car on risque de ne pas utiliser les index. Par exemple dans une requête du type :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
SELECT myid
FROM tab1
WHERE TO_NUMBER(TO_CHAR(mydate, 'yyyymmdd')) = 20080101
si tab1 est indexée sur le champ mydate, on n'utilisera pas l'index car la colonne sera d'abord convertie en number (et on ne dispose pas d'index sur mydate convertie en nombre).

Mais dans mon cas, la seule solution que je vois pour ne pas appeler TO_DATE à l'intérieur de ma requête, est de :
- faire une première requête de select from tab2, avec un bulk collect dans un tableau
- parcourir ce tableau et le recopier en convertissant la date à l'intérieur d'un nouveau tableau
- insérer le nouveau tableau créé via un forall à l'intérieur de la table tab1

Il me semble que ça revient à beaucoup compliquer la requête, et probablement diminuer les performances....?

Si vous avez un avis ou une autre idée pour éviter ce warning je suis preneur

Merci