1

Bon, j'ai un problème de requête SQL assez con (c'est de l'Oracle)...
Je veux faire une sous-requête synchronisée, or comme je fais un ORDER BY dans la sous-requête et que je ne veux que la première valeur retournée, je suis obligé de faire un SELECT intermédiaire supplémentaire pour que mon filtre sur la première valeur (ROWID=1) prenne bien en compte l'ORDER BY (vous suivez ? trigic). Or j'ai l'impression que si on peut synchroniser une sous-requête, on ne peut pas le faire avec une sous-sous-requête...
La requête
SELECT DISTINCT 'p' || i.no_individu as IDENTIFIANT, concat('p', lpad(to_char(i.no_individu), 6, '0')) as UID_LDAP, i.nom_patronymique as NOM, i.nom_usuel as NOM_USUEL, i.prenom as PRENOM, i.c_civilite as CIVILITE, 'ECM' || lpad(to_char(i.no_individu), 6, '0') as CODE_BARRE, '0340112M' as RNE_ETABLISSEMENT, nvl((s.lc_structure), (SELECT MIN(s2.c_structure) FROM structure s2, affectation a2 WHERE (a2.no_dossier_pers = i.no_individu) AND (a2.c_structure = s2.c_structure) AND (a2.d_deb_affectation <= sysdate) AND ((a.d_fin_affectation >= sysdate) OR (a.d_fin_affectation IS NULL)) )) AS CODE_COMPOSANTE, nvl((s.lc_structure), (SELECT MIN(s2.lc_structure) FROM structure s2, affectation a2 WHERE (a2.no_dossier_pers = i.no_individu) AND (a2.c_structure = s2.c_structure) AND (a2.d_deb_affectation <= sysdate) AND ((a.d_fin_affectation >= sysdate) OR (a.d_fin_affectation IS NULL)) )) AS COMPOSANTE, (SELECT * FROM (SELECT ec2.c_corps FROM element_carriere ec2, carriere c2 WHERE (i.no_individu = ec2.no_dossier_pers) AND (ec2.no_dossier_pers = c2.no_dossier_pers) AND (c2.d_deb_carriere <= sysdate) AND ((ec2.d_fin_element >= sysdate) OR (ec2.d_fin_element IS NULL)) AND (ec2.d_effet_element <= sysdate) AND ((c2.d_fin_carriere >= sysdate) OR (c2.d_fin_carriere IS NULL)) ORDER BY ec2.d_effet_element DESC ) WHERE (ROWNUM=1)) AS CODE_CORPS, iem.no_e_mail as EMAIL FROM individu i, affectation a, code_insee ci, chercheur c, structure s, personnel p, individu_e_mail iem, corps co, element_carriere ec, carriere c WHERE (i.no_individu = ci.no_dossier_pers(+)) AND (i.no_individu = a.no_dossier_pers(+)) AND (i.no_individu = iem.no_individu(+)) AND (i.no_individu = c.no_individu(+)) AND (i.no_individu = p.no_dossier_pers(+)) AND (p.c_structure = s.c_structure(+)) AND (i.no_individu = c.no_dossier_pers(+)) AND (c.no_dossier_pers = ec.no_dossier_pers(+)) AND ( (((a.d_deb_affectation <= sysdate) AND ((a.d_fin_affectation >= sysdate) OR (a.d_fin_affectation IS NULL)))) OR (((c.d_deb_str_trav <= sysdate) AND ((c.d_fin_str_trav >= sysdate) OR (c.d_fin_str_trav IS NULL)))) )
Capture d'écran pour "mieux comprendre" (\o/)
wRJm
avatar

2

pourquoi ne pas utiliser un "limit X,Y" pour économiser ta soussousousousousousousrequète ?
avatar
Webmaster du site Ti-FRv3 (et aussi de DevLynx)
Si moins de monde enculait le système, alors celui ci aurait plus de mal à nous sortir de si grosses merdes !
"L'erreur humaine est humaine"©Nil (2006) // topics/6238-moved-jamais-jaurais-pense-faire-ca

3

Ca n'existe pas sous Oracle, malheureusement... la façon de faire est de faire un filtre sur le ROWID.
avatar

4

erf sad
avatar
Webmaster du site Ti-FRv3 (et aussi de DevLynx)
Si moins de monde enculait le système, alors celui ci aurait plus de mal à nous sortir de si grosses merdes !
"L'erreur humaine est humaine"©Nil (2006) // topics/6238-moved-jamais-jaurais-pense-faire-ca

5

c'est quoi une requête "synchronisée" ? parceque sinon, encapsuler la requête dans une autre qui n'a pour but que de filtrer la première ligne ça me semble être la méthode "normale" de procéder, mais comme je ne comprends pas cette histoire de synchronisation je suis probablement passé à côté du problème grin
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

6

Bah c'est juste que tu utilises, dans la jointure de requête imbriquée, un alias défini dans la première requête ; comme ça ta requête imbriquée ne te retourne que les enregistrements de la valeur courante de la ligne en cours de la première requête.
avatar

7

? (pas testé)
SELECT DISTINCT 'p' || i.no_individu as IDENTIFIANT, concat('p', lpad(to_char(i.no_individu), 6, '0')) as UID_LDAP, i.nom_patronymique as NOM, i.nom_usuel as NOM_USUEL, i.prenom as PRENOM, i.c_civilite as CIVILITE, 'ECM' || lpad(to_char(i.no_individu), 6, '0') as CODE_BARRE, '0340112M' as RNE_ETABLISSEMENT, nvl((s.lc_structure), (SELECT MIN(s2.c_structure) FROM structure s2, affectation a2 WHERE (a2.no_dossier_pers = i.no_individu) AND (a2.c_structure = s2.c_structure) AND (a2.d_deb_affectation <= sysdate) AND ((a.d_fin_affectation >= sysdate) OR (a.d_fin_affectation IS NULL)) )) AS CODE_COMPOSANTE, nvl((s.lc_structure), (SELECT MIN(s2.lc_structure) FROM structure s2, affectation a2 WHERE (a2.no_dossier_pers = i.no_individu) AND (a2.c_structure = s2.c_structure) AND (a2.d_deb_affectation <= sysdate) AND ((a.d_fin_affectation >= sysdate) OR (a.d_fin_affectation IS NULL)) )) AS COMPOSANTE, (SELECT CODE_CORPS.* FROM individu i2, (SELECT ec2.c_corps FROM element_carriere ec2, carriere c2 WHERE (i2.no_individu = ec2.no_dossier_pers) AND (ec2.no_dossier_pers = c2.no_dossier_pers) AND (c2.d_deb_carriere <= sysdate) AND ((ec2.d_fin_element >= sysdate) OR (ec2.d_fin_element IS NULL)) AND (ec2.d_effet_element <= sysdate) AND ((c2.d_fin_carriere >= sysdate) OR (c2.d_fin_carriere IS NULL)) ORDER BY ec2.d_effet_element DESC ) WHERE (ROWNUM=1) AND (i2.no_individu = i.no_individu)) AS CODE_CORPS, iem.no_e_mail as EMAIL FROM individu i, affectation a, code_insee ci, chercheur c, structure s, personnel p, individu_e_mail iem, corps co, element_carriere ec, carriere c WHERE (i.no_individu = ci.no_dossier_pers(+)) AND (i.no_individu = a.no_dossier_pers(+)) AND (i.no_individu = iem.no_individu(+)) AND (i.no_individu = c.no_individu(+)) AND (i.no_individu = p.no_dossier_pers(+)) AND (p.c_structure = s.c_structure(+)) AND (i.no_individu = c.no_dossier_pers(+)) AND (c.no_dossier_pers = ec.no_dossier_pers(+)) AND ( (((a.d_deb_affectation <= sysdate) AND ((a.d_fin_affectation >= sysdate) OR (a.d_fin_affectation IS NULL)))) OR (((c.d_deb_str_trav <= sysdate) AND ((c.d_fin_str_trav >= sysdate) OR (c.d_fin_str_trav IS NULL)))) )

avatar

8

Je teste ça lundi... mon frère m'a aussi fait une proposition qui n'est pas tout à fait la même. En tout cas, merci !
avatar

9

Bon, ta solution ne fonctionne pas, mais j'ai trouvé quelque chose d'approchant et qui marche. Par contre, c'est tellement gourmand que ça m'a bouffé tout mon tablespace temporaire, donc je suis coincé jusqu'au redémarrage du service cette nuit pour avancer :/.
avatar

10

bon maintenant que t'as trouvé une solution je peux poster ma contribution pas utile qui a sa place en ./1,5 (je me suis beaucoup retenu pour ne pas la poster):

ça couterait pas moins cher de refondre totalement le système ? fatigue

11

Refondre comment ? Ecrire une nouvelle requête ? Je veux bien, je ne suis pas un pro en optimisation SQL... La seule chose, c'est que je n'ai le droit qu'à une et une seule requête principale, je ne peux pas avoir un script qui exécute et traite plusieurs requêtes (ça me fait bien chier, d'ailleurs :/). Donc je suis obligé d'avoir ça...

'Cela dit, je me demande de plus en plus si je ne vais pas héberger un script sur un serveur qui irait mettre à jour toutes les 10 secondes une table dédiée, ça risque de m'être beaucoup moins coûteux en temps, en ressources serveur, et en tout ce que tu veux...)
avatar

12

Juste parce que j'en suis fier (je crois que c'est la requête la plus complexe que j'ai eu à écrire... mais bon, il y a très probablement de nombreuses optimisation à faire - en particulier au niveau des BETWEEN ou des NVL à développer ou pas suivant les cas) :
SQL final
SELECT DISTINCT i.no_individu, 'p' || i.no_individu as IDENTIFIANT, concat('p', lpad(to_char(i.no_individu), 6, '0')) as UID_LDAP, i.nom_patronymique as NOM, i.nom_usuel as NOM_USUEL, i.prenom as PRENOM, i.c_civilite as CIVILITE, 'ECM' || lpad(to_char(i.no_individu), 6, '0') as CODE_BARRE, '0340112M' as RNE_ETABLISSEMENT, nvl((s.lc_structure), (SELECT MIN(s2.c_structure) FROM structure s2, affectation a2 WHERE (i.no_individu = a2.no_dossier_pers) AND (a2.c_structure = s2.c_structure) AND (a2.d_deb_affectation <= sysdate) AND ((a.d_fin_affectation >= sysdate) OR (a.d_fin_affectation IS NULL)) )) AS CODE_COMPOSANTE, nvl((s.lc_structure), (SELECT MIN(s2.lc_structure) FROM structure s2, affectation a2 WHERE (i.no_individu = a2.no_dossier_pers) AND (a2.c_structure = s2.c_structure) AND (a2.d_deb_affectation <= sysdate) AND ((a.d_fin_affectation >= sysdate) OR (a.d_fin_affectation IS NULL)) )) AS COMPOSANTE, (SELECT c_corps FROM (SELECT ec2.c_corps, ec2.no_dossier_pers FROM element_carriere ec2, carriere c2, corps co2 WHERE (c2.no_dossier_pers = ec2.no_dossier_pers(+)) AND (c2.d_deb_carriere <= sysdate) AND (ec2.c_corps = co2.c_corps) AND ((ec2.d_fin_element >= sysdate) OR (ec2.d_fin_element IS NULL)) AND (ec2.d_effet_element <= sysdate) AND ((c2.d_fin_carriere >= sysdate) OR (c2.d_fin_carriere IS NULL)) ORDER BY ec2.d_effet_element DESC ) WHERE (no_dossier_pers = i.no_individu) AND (ROWNUM=1)) AS CODE_CORPS, (SELECT lc_corps FROM (SELECT co2.lc_corps, ec2.no_dossier_pers FROM element_carriere ec2, carriere c2, corps co2 WHERE (c2.no_dossier_pers = ec2.no_dossier_pers(+)) AND (c2.d_deb_carriere <= sysdate) AND (ec2.c_corps = co2.c_corps) AND ((ec2.d_fin_element >= sysdate) OR (ec2.d_fin_element IS NULL)) AND (ec2.d_effet_element <= sysdate) AND ((c2.d_fin_carriere >= sysdate) OR (c2.d_fin_carriere IS NULL)) ORDER BY ec2.d_effet_element DESC ) WHERE (no_dossier_pers = i.no_individu) AND (ROWNUM=1)) AS CORPS, iem.no_e_mail as EMAIL, NULL AS GRADE, decode(sign((sysdate - to_date(concat('31/08',to_char(sysdate,'YYYY'))))),-1,to_char(add_months(sysdate,-12),'YYYY')||'/'|| to_char(sysdate,'YYYY'),0,to_char(add_months(sysdate,-12),'YYYY')||'/'|| to_char(sysdate,'YYYY'), to_char(sysdate,'YYYY')||'/'||to_char(add_months(sysdate,12),'YYYY')) AS ANNEE, (CASE WHEN (a.d_deb_affectation <= sysdate) THEN (CASE WHEN (a.d_fin_affectation >= sysdate) THEN 'Carte professionnelle' WHEN (a.d_fin_affectation IS NULL) THEN 'Carte professionnelle' END) -- Comme c'est un fallback, on n'a pas à refiltrer comme on fait dans le WHERE : ceux qui sont en partie personnel et en partie hébergés ne passeront pas dans la suite du CASE WHEN (c.d_deb_str_trav <= sysdate) THEN (CASE WHEN (c.d_fin_str_trav >= sysdate) THEN 'Carte services' WHEN (c.d_fin_str_trav IS NULL) THEN 'Carte services' END) END) AS TYPE_CARTE, NULL AS QUALITE, NULL AS ADH_SPORT, NULL AS LICENCE_SPORT, NULL AS CODE_ACTIVITE, concat('p', lpad(to_char(i.no_individu), 6, '0')) as LOGIN, '88' AS CODE_SOCIETE, --nvl(indice_majore(recup_remuneration_brute(ec.no_dossier_pers, ec.no_seq_carriere, ec.no_seq_element), sysdate), indice_majore(av.indice_contrat, av.d_deb_contrat_trav)) AS INM (CASE WHEN (nvl(indice_majore(recup_remuneration_brute(ec.no_dossier_pers, ec.no_seq_carriere, ec.no_seq_element), sysdate), indice_majore(av.indice_contrat, av.d_deb_contrat_trav)) <320) THEN '1' WHEN (nvl(indice_majore(recup_remuneration_brute(ec.no_dossier_pers, ec.no_seq_carriere, ec.no_seq_element), sysdate), indice_majore(av.indice_contrat, av.d_deb_contrat_trav)) <400) THEN '2' WHEN (nvl(indice_majore(recup_remuneration_brute(ec.no_dossier_pers, ec.no_seq_carriere, ec.no_seq_element), sysdate), indice_majore(av.indice_contrat, av.d_deb_contrat_trav)) <465) THEN '3' WHEN (nvl(indice_majore(recup_remuneration_brute(ec.no_dossier_pers, ec.no_seq_carriere, ec.no_seq_element), sysdate), indice_majore(av.indice_contrat, av.d_deb_contrat_trav)) <550) THEN '4' WHEN (nvl(indice_majore(recup_remuneration_brute(ec.no_dossier_pers, ec.no_seq_carriere, ec.no_seq_element), sysdate), indice_majore(av.indice_contrat, av.d_deb_contrat_trav)) >=550) THEN '5' ELSE '6' END) AS TARIF_CROUS, nvl(nvl(a.d_fin_affectation, c.d_fin_str_trav), concat('3010', decode(sign((sysdate - to_date(concat('31/08',to_char(sysdate,'YYYY'))))),-1,to_char(sysdate,'YYYY'),0,to_char(to_char(sysdate,'YYYY'),to_char(add_months(sysdate,12),'YYYY'))))) AS DATE_FIN_VALIDITE FROM individu i, affectation a, code_insee ci, chercheur c, structure s, personnel p, individu_e_mail iem, corps co, element_carriere ec, carriere c, contrat_travail ct, contrat_avenant av, type_contrat_travail tct , evolution_chevron ev_ch, majoration_indice mi WHERE (i.no_individu = ci.no_dossier_pers(+)) AND (i.no_individu = a.no_dossier_pers(+)) AND (i.no_individu = iem.no_individu(+)) AND (i.no_individu = c.no_individu(+)) AND (i.no_individu = p.no_dossier_pers(+)) AND (p.c_structure = s.c_structure(+)) AND (i.no_individu = c.no_dossier_pers(+)) AND (c.no_dossier_pers = ec.no_dossier_pers(+)) AND (i.no_individu = ct.no_dossier_pers(+)) AND (ct.no_dossier_pers = av.no_dossier_pers(+)) AND (ct.c_type_contrat_trav = tct.c_type_contrat_trav(+)) AND (ec.no_dossier_pers = ev_ch.no_dossier_pers(+)) AND (av.indice_contrat = mi.c_indice_chevron(+)) AND ( ( ((a.d_deb_affectation <= sysdate) AND ((a.d_fin_affectation >= sysdate) OR (a.d_fin_affectation IS NULL))) AND (( (ec.tem_provisoire = 'N') AND (ec.tem_confirme = 'O') AND (ec.no_arrete_annulation IS NULL) AND (to_date(to_char(sysdate,'DD/MM/YYYY'),'DD/MM/YYYY') BETWEEN ec.d_effet_element AND nvl(ec.d_fin_element, sysdate) or (ec.d_fin_element < ec.d_effet_element)) ) OR ( (av.tem_annulation = 'N') AND (to_date(to_char(sysdate, 'DD/MM/YYYY'), 'DD/MM/YYYY') BETWEEN nvl(av.d_deb_contrat_trav,sysdate) AND nvl(av.d_fin_execution, nvl(av.d_fin_contrat_trav,sysdate))) )) )--(NOT((a.d_deb_affectation <= sysdate) AND ((a.d_fin_affectation >= sysdate) OR (a.d_deb_affectation IS NOT NULL AND a.d_fin_affectation IS NULL)))))) -- OR (((c.d_deb_str_trav <= sysdate) AND ((c.d_fin_str_trav >= sysdate) OR (c.d_fin_str_trav IS NULL)) AND (nvl(indice_majore(recup_remuneration_brute(ec.no_dossier_pers, ec.no_seq_carriere, ec.no_seq_element), sysdate), indice_majore(av.indice_contrat, av.d_deb_contrat_trav)) IS NULL) AND (NOT((a.d_deb_affectation <= sysdate) OR (a.d_fin_affectation >= sysdate)) OR (a.d_deb_affectation IS NULL AND a.d_fin_affectation IS NULL)))) ) AND (i.nom_patronymique LIKE '{0}%' OR i.prenom LIKE '{0}%') AND (length('{0}')>=2) ORDER BY i.no_individu;
avatar

13

14

Nil (./12) :
Juste parce que j'en suis fier (je crois que c'est la requête la plus complexe que j'ai eu à écrire... mais bon, il y a très probablement de nombreuses optimisation à faire - en particulier au niveau des BETWEEN ou des NVL à développer ou pas suivant les cas) :
SQL final
SELECT DISTINCT i.no_individu, 'p' || i.no_individu as IDENTIFIANT, concat('p', lpad(to_char(i.no_individu), 6, '0')) as UID_LDAP, i.nom_patronymique as NOM, i.nom_usuel as NOM_USUEL, i.prenom as PRENOM, i.c_civilite as CIVILITE, 'ECM' || lpad(to_char(i.no_individu), 6, '0') as CODE_BARRE, '0340112M' as RNE_ETABLISSEMENT, nvl((s.lc_structure), (SELECT MIN(s2.c_structure) FROM structure s2, affectation a2 WHERE (i.no_individu = a2.no_dossier_pers) AND (a2.c_structure = s2.c_structure) AND (a2.d_deb_affectation <= sysdate) AND ((a.d_fin_affectation >= sysdate) OR (a.d_fin_affectation IS NULL)) )) AS CODE_COMPOSANTE, nvl((s.lc_structure), (SELECT MIN(s2.lc_structure) FROM structure s2, affectation a2 WHERE (i.no_individu = a2.no_dossier_pers) AND (a2.c_structure = s2.c_structure) AND (a2.d_deb_affectation <= sysdate) AND ((a.d_fin_affectation >= sysdate) OR (a.d_fin_affectation IS NULL)) )) AS COMPOSANTE, (SELECT c_corps FROM (SELECT ec2.c_corps, ec2.no_dossier_pers FROM element_carriere ec2, carriere c2, corps co2 WHERE (c2.no_dossier_pers = ec2.no_dossier_pers(+)) AND (c2.d_deb_carriere <= sysdate) AND (ec2.c_corps = co2.c_corps) AND ((ec2.d_fin_element >= sysdate) OR (ec2.d_fin_element IS NULL)) AND (ec2.d_effet_element <= sysdate) AND ((c2.d_fin_carriere >= sysdate) OR (c2.d_fin_carriere IS NULL)) ORDER BY ec2.d_effet_element DESC ) WHERE (no_dossier_pers = i.no_individu) AND (ROWNUM=1)) AS CODE_CORPS, (SELECT lc_corps FROM (SELECT co2.lc_corps, ec2.no_dossier_pers FROM element_carriere ec2, carriere c2, corps co2 WHERE (c2.no_dossier_pers = ec2.no_dossier_pers(+)) AND (c2.d_deb_carriere <= sysdate) AND (ec2.c_corps = co2.c_corps) AND ((ec2.d_fin_element >= sysdate) OR (ec2.d_fin_element IS NULL)) AND (ec2.d_effet_element <= sysdate) AND ((c2.d_fin_carriere >= sysdate) OR (c2.d_fin_carriere IS NULL)) ORDER BY ec2.d_effet_element DESC ) WHERE (no_dossier_pers = i.no_individu) AND (ROWNUM=1)) AS CORPS, iem.no_e_mail as EMAIL, NULL AS GRADE, decode(sign((sysdate - to_date(concat('31/08',to_char(sysdate,'YYYY'))))),-1,to_char(add_months(sysdate,-12),'YYYY')||'/'|| to_char(sysdate,'YYYY'),0,to_char(add_months(sysdate,-12),'YYYY')||'/'|| to_char(sysdate,'YYYY'), to_char(sysdate,'YYYY')||'/'||to_char(add_months(sysdate,12),'YYYY')) AS ANNEE, (CASE WHEN (a.d_deb_affectation <= sysdate) THEN (CASE WHEN (a.d_fin_affectation >= sysdate) THEN 'Carte professionnelle' WHEN (a.d_fin_affectation IS NULL) THEN 'Carte professionnelle' END) -- Comme c'est un fallback, on n'a pas à refiltrer comme on fait dans le WHERE : ceux qui sont en partie personnel et en partie hébergés ne passeront pas dans la suite du CASE WHEN (c.d_deb_str_trav <= sysdate) THEN (CASE WHEN (c.d_fin_str_trav >= sysdate) THEN 'Carte services' WHEN (c.d_fin_str_trav IS NULL) THEN 'Carte services' END) END) AS TYPE_CARTE, NULL AS QUALITE, NULL AS ADH_SPORT, NULL AS LICENCE_SPORT, NULL AS CODE_ACTIVITE, concat('p', lpad(to_char(i.no_individu), 6, '0')) as LOGIN, '88' AS CODE_SOCIETE, --nvl(indice_majore(recup_remuneration_brute(ec.no_dossier_pers, ec.no_seq_carriere, ec.no_seq_element), sysdate), indice_majore(av.indice_contrat, av.d_deb_contrat_trav)) AS INM (CASE WHEN (nvl(indice_majore(recup_remuneration_brute(ec.no_dossier_pers, ec.no_seq_carriere, ec.no_seq_element), sysdate), indice_majore(av.indice_contrat, av.d_deb_contrat_trav)) <320) THEN '1' WHEN (nvl(indice_majore(recup_remuneration_brute(ec.no_dossier_pers, ec.no_seq_carriere, ec.no_seq_element), sysdate), indice_majore(av.indice_contrat, av.d_deb_contrat_trav)) <400) THEN '2' WHEN (nvl(indice_majore(recup_remuneration_brute(ec.no_dossier_pers, ec.no_seq_carriere, ec.no_seq_element), sysdate), indice_majore(av.indice_contrat, av.d_deb_contrat_trav)) <465) THEN '3' WHEN (nvl(indice_majore(recup_remuneration_brute(ec.no_dossier_pers, ec.no_seq_carriere, ec.no_seq_element), sysdate), indice_majore(av.indice_contrat, av.d_deb_contrat_trav)) <550) THEN '4' WHEN (nvl(indice_majore(recup_remuneration_brute(ec.no_dossier_pers, ec.no_seq_carriere, ec.no_seq_element), sysdate), indice_majore(av.indice_contrat, av.d_deb_contrat_trav)) >=550) THEN '5' ELSE '6' END) AS TARIF_CROUS, nvl(nvl(a.d_fin_affectation, c.d_fin_str_trav), concat('3010', decode(sign((sysdate - to_date(concat('31/08',to_char(sysdate,'YYYY'))))),-1,to_char(sysdate,'YYYY'),0,to_char(to_char(sysdate,'YYYY'),to_char(add_months(sysdate,12),'YYYY'))))) AS DATE_FIN_VALIDITE FROM individu i, affectation a, code_insee ci, chercheur c, structure s, personnel p, individu_e_mail iem, corps co, element_carriere ec, carriere c, contrat_travail ct, contrat_avenant av, type_contrat_travail tct , evolution_chevron ev_ch, majoration_indice mi WHERE (i.no_individu = ci.no_dossier_pers(+)) AND (i.no_individu = a.no_dossier_pers(+)) AND (i.no_individu = iem.no_individu(+)) AND (i.no_individu = c.no_individu(+)) AND (i.no_individu = p.no_dossier_pers(+)) AND (p.c_structure = s.c_structure(+)) AND (i.no_individu = c.no_dossier_pers(+)) AND (c.no_dossier_pers = ec.no_dossier_pers(+)) AND (i.no_individu = ct.no_dossier_pers(+)) AND (ct.no_dossier_pers = av.no_dossier_pers(+)) AND (ct.c_type_contrat_trav = tct.c_type_contrat_trav(+)) AND (ec.no_dossier_pers = ev_ch.no_dossier_pers(+)) AND (av.indice_contrat = mi.c_indice_chevron(+)) AND ( ( ((a.d_deb_affectation <= sysdate) AND ((a.d_fin_affectation >= sysdate) OR (a.d_fin_affectation IS NULL))) AND (( (ec.tem_provisoire = 'N') AND (ec.tem_confirme = 'O') AND (ec.no_arrete_annulation IS NULL) AND (to_date(to_char(sysdate,'DD/MM/YYYY'),'DD/MM/YYYY') BETWEEN ec.d_effet_element AND nvl(ec.d_fin_element, sysdate) or (ec.d_fin_element < ec.d_effet_element)) ) OR ( (av.tem_annulation = 'N') AND (to_date(to_char(sysdate, 'DD/MM/YYYY'), 'DD/MM/YYYY') BETWEEN nvl(av.d_deb_contrat_trav,sysdate) AND nvl(av.d_fin_execution, nvl(av.d_fin_contrat_trav,sysdate))) )) )--(NOT((a.d_deb_affectation <= sysdate) AND ((a.d_fin_affectation >= sysdate) OR (a.d_deb_affectation IS NOT NULL AND a.d_fin_affectation IS NULL)))))) -- OR (((c.d_deb_str_trav <= sysdate) AND ((c.d_fin_str_trav >= sysdate) OR (c.d_fin_str_trav IS NULL)) AND (nvl(indice_majore(recup_remuneration_brute(ec.no_dossier_pers, ec.no_seq_carriere, ec.no_seq_element), sysdate), indice_majore(av.indice_contrat, av.d_deb_contrat_trav)) IS NULL) AND (NOT((a.d_deb_affectation <= sysdate) OR (a.d_fin_affectation >= sysdate)) OR (a.d_deb_affectation IS NULL AND a.d_fin_affectation IS NULL)))) ) AND (i.nom_patronymique LIKE '{0}%' OR i.prenom LIKE '{0}%') AND (length('{0}')>=2) ORDER BY i.no_individu;

cébo !
avatar
Webmaster du site Ti-FRv3 (et aussi de DevLynx)
Si moins de monde enculait le système, alors celui ci aurait plus de mal à nous sortir de si grosses merdes !
"L'erreur humaine est humaine"©Nil (2006) // topics/6238-moved-jamais-jaurais-pense-faire-ca