bonjour
j ai une table qui contient un champ varchar2 sensé représenté une date mais certaine données tres vieille sont sous une mauvaise forme (ex : 32/02/1994).
J ai ecrit une fonction qui verifie si la valeur est convertible en date et qui s appele IS_VALID_VAR_DATE.
Le probleme c'est que si je lance la requete
Je me retrouve avec une erreur Ora-1839.
Code : Sélectionner tout - Visualiser dans une fenêtre à part select count(*) from (select * from mytable where is_valid_var_date(macolonne) = 1 and macolonne is not null) myview where to_date(macolonne,dd/mm/yyyy) < sysdate)
Apres avoir fait un explain plan je voi que Oracle a joint les 3 filtres sur macolonne en un filtre.
J' ai essayé le HINT NO_MERGE mais j ai le meme filtre. il a juste rajouté une vue a partir de la table.
Etant en oracle 11.1 , le hint ORDERED_PREDICATES a disparu.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 ---------------------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | ---------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 1 | 27 | 515 (2)| 00:00:07 | | 1 | SORT AGGREGATE | | 1 | 27 | | | | 2 | VIEW | | 141 | 3807 | 515 (2)| 00:00:07 | |* 3 | TABLE ACCESS FULL| MATABLE | 141 | 1551 | 515 (2)| 00:00:07 | ---------------------------------------------------------------------------------------- PLAN_TABLE_OUTPUT -------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------- -------------------- Predicate Information (identified by operation id): --------------------------------------------------- 3 - filter(TO_NUMBER(TO_CHAR(TO_DATE("MATABLE"."MACOLONNE",'dd/mm/yyyy' ),'yyyymmdd'))<20090901 AND "IS_VALID_VAR_DATE"("MACOLONNE")=1 AND "MACOLONNE" IS NOT NULL)
Quelqu'un a t'il une idée ?
Merci
Partager