Précédent   Forum des professionnels en informatique > Bases de données > Oracle > SQL
SQL Forum d'entraide sur le SQL pour Oracle
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 07/12/2007, 12h40   #1
Membre du Club
 
Inscription : décembre 2003
Messages : 168
Détails du profil
Informations forums :
Inscription : décembre 2003
Messages : 168
Points : 41
Points : 41
Par défaut [9,10] Vues avec Paramètres à passer

Bonjour,

je fantasme peut être...mais je me demande si Oracle saurait faire ça, un truc du genre :

Code :
1
2
3
 
CREATE VIEW myView
SELECT * FROM matable WHERE typdos = :1;
puis l'utiliser comme ça :

Code :
1
2
 
SELECT * FROM myView USING 'TEST';
bon c'est vraiment pour illustrer mon principe (ne me flinguer pas !)

si vous avez des idées merci
lunab54 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/12/2007, 13h14   #2
Expert Confirmé
 
Avatar de LeoAnderson
 
Inscription : septembre 2004
Messages : 2 942
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 2 942
Points : 2 972
Points : 2 972
Code :
SELECT * FROM mavue WHERE typdos='TEST';


que cherchez-vous à faire ?
LeoAnderson est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/12/2007, 13h43   #3
Membre du Club
 
Inscription : décembre 2003
Messages : 168
Détails du profil
Informations forums :
Inscription : décembre 2003
Messages : 168
Points : 41
Points : 41
oui c'était previsible en fait voilà la vue (à vouloir faire trop simple...)

Code :
1
2
3
4
5
6
7
8
9
10
11
12
 
SELECT 'ANNUEL',typdos,count(*),to_char(current_date, 'YYYY'),''
FROM gpc_entdos
WHERE datdep >= to_date('01/01/' || to_char(current_date, 'YYYY'),'dd/mm/yyyy')
GROUP BY typdos 
 
union 
 
SELECT 'PERIODE',typdos,count(*),to_char((NEXT_DAY(SYSDATE, 'WED') - 13),'dd/mm/yyyy'),to_char(SYSDATE,'dd/mm/yyyy')
FROM gpc_entdos
WHERE datdep >= (NEXT_DAY(SYSDATE, 'WED') -7)
GROUP BY typdos
ca sert à sortir un tableau unique avec le nombre de dossiers par type depuis le début de l'année et depuis le jeudi de la semaine précédente.

en fait, on voudrait adapter cette vue pour permettre de spécifier la date de départ de la requête 'PERIODE' avec une date définit au cas par cas dans la requête sur la vue.

a la question mais pourquoi ne pas le faire côté appli, je répondrai que je n'ai maitrise absolument pas l'appli qui fonctionne en ODBC avec VB5 et n'accepte pas UNION donc impossible de mettre cette requête côté appli (juste un pauvre Select ... where ... group ... order ... passe correctement)

Je ne sais pas si je me fais bien comprendre

merci de votre aide
lunab54 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/12/2007, 14h33   #4
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
Pour info : remplace UNION par UNION ALL. UNION fait un DISCTINCT alors que dans le cas présent tu ne peux pas avoir de doublons... donc un tri pour rien
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/12/2007, 15h00   #5
Membre du Club
 
Inscription : décembre 2003
Messages : 168
Détails du profil
Informations forums :
Inscription : décembre 2003
Messages : 168
Points : 41
Points : 41
Merci pour l'info, je note.

pas une ptite idée pour mon problème ?
lunab54 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/12/2007, 15h02   #6
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
peux-tu réécrire la requête en positionnant une variable là où tu veux, parce que j'ai pas bien compris
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/12/2007, 15h13   #7
Membre du Club
 
Inscription : décembre 2003
Messages : 168
Détails du profil
Informations forums :
Inscription : décembre 2003
Messages : 168
Points : 41
Points : 41
Code :
1
2
3
4
5
6
7
8
9
10
11
12
 
 
SELECT 'ANNUEL',typdos,count(*),to_char(current_date, 'YYYY'),''
FROM gpc_entdos
WHERE datdep >= to_date('01/01/' || to_char (current_date, 'YYYY'),'dd/mm/yyyy')
GROUP BY typdos 
 
union ALL
 
SELECT 'PERIODE',typdos,count(*),to_char((NEXT_DAY(SYSDATE, 'WED') - 13),'dd/mm/yyyy'),to_char(SYSDATE,'dd/mm/yyyy')
FROM gpc_entdos
WHERE datdep >= "VARIABLE_MA_DATE"
lunab54 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/12/2007, 15h19   #8
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
Et bien crée ta vue comme ça :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
SELECT 'ANNUEL',
                     typdos,
                     count(*),
                     to_char(current_date, 'YYYY'),
                     '', 
                     datdep datdep_ann,
                     '' datdep_per
FROM gpc_entdos
WHERE datdep >= to_date('01/01/' || to_char (current_date, 'YYYY'),'dd/mm/yyyy')
GROUP BY typdos 
union ALL
 SELECT 'PERIODE',
             typdos,
             count(*),
             to_char((NEXT_DAY(SYSDATE, 'WED') - 13),'dd/mm/yyyy'),
             to_char(SYSDATE,'dd/mm/yyyy'),
             '' datdep_ann,
             datdep datdep_per
FROM gpc_entdos
Et ensuite :
Code :
1
2
SELECT * FROM ma_vue
WHERE datdep_per >= "VARIABLE_MA_DATE"
non ?
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/12/2007, 16h52   #9
Membre du Club
 
Inscription : décembre 2003
Messages : 168
Détails du profil
Informations forums :
Inscription : décembre 2003
Messages : 168
Points : 41
Points : 41
hum...

ds la 2ème requête pour faire le count(*) il faut un group by

si tu rajoutes le champ datdep tu dois le mettre ds le group by

à ce moment là comme les dossiers sont déposés à des jours différents tu as des comptes par date et type de dossier et plus seulement par type de dossier

c'est pour ça que j'imaginai intervenir dans la clause where

autres idéee ?
lunab54 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/12/2007, 18h27   #10
Membre du Club
 
Inscription : décembre 2003
Messages : 168
Détails du profil
Informations forums :
Inscription : décembre 2003
Messages : 168
Points : 41
Points : 41
Bon en fait j'ai simplifier au max pour trouver ce que je voulais :

dans la vue
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
SELECT 
  'ANNUEL',
  typdos,
  current_date
FROM gpc_entdos
WHERE datdep >= to_date('01/01/' || to_char(current_date, 'YYYY'),'dd/mm/yyyy')
 
union ALL
 
SELECT
             'PERIODE',
             typdos,
             datdep
FROM gpc_entdos
puis la requete

Code :
1
2
3
4
5
 
SELECT periodicite,typdos,count(*)
FROM stats_nombre_dossier_test
WHERE datdep BETWEEN to_date('01/11/2007','dd/mm/yyyy') AND to_date('29/11/2007','dd/mm/yyyy') OR periodicite = 'ANNUEL'
GROUP BY periodicite, typdos;
ben voilà, je sais pas si ca reservira...

merci Orafrance pour ton soutien
lunab54 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 16h31.


 
 
 
 
Partenaires

Hébergement Web