Bonjour,
Savez-vous comment faire pour récupérer un nom de table dans une variable et utiliser cette variable dans la partie FROM d'une requête SQL.
Je m'explique, mon nom de table change tous les mois et j'aimerais récupérer ce nom de table de façon automatique pour l'utiliser dans mes requêtes.
Voici le code :
Pour simplifier,
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
22 DEFINE ValAnnee = TO_CHAR(2008) VARIABLE ValMois VARCHAR2(2); VARIABLE ValPeriode VARCHAR2(6); VARIABLE TableTemp VARCHAR2(28); BEGIN IF sysdate BETWEEN TO_DATE('02/2008','mm/yyyy') AND TO_DATE('12/2008','mm/yyyy') THEN :ValMois := LPAD(TO_CHAR(ADD_MONTHS(sysdate,-1),'mm'),2,'0'); :ValPeriode := TO_CHAR(&ValAnnee||:ValMois); ELSIF sysdate >= TO_DATE('01/2009','mm/yyyy') THEN :ValMois := '12'; :ValPeriode := TO_CHAR(&ValAnnee||TO_CHAR(sysdate,'mm')+11); END IF; :TableTemp :=TO_CHAR('NomSchema.NomTable_'||SUBSTR(:ValPeriode,5,2)); :ValMois := TO_NUMBER(:ValMois); END; / INSERT INTO AutreTable (champ1, champ2) SELECT champ1, champ2 FROM :TableTemp WHERE WHERE annee=&ValAnnee AND periode=:ValPeriode;
en mars 2008 je récupère '200802' pour ValPeriode, 2 pour ValMois et 'NomSchema.NomTable_02' pour la table ;
en février 2009, j'aurais '200813', 12 et 'NomSchema.NomTable_13' ;
en mai 2009, j'aurai '200816', 12 et 'NomSchema.NomTable_16'
... (et ainsi de suite).
Lorsque je lance mon script (via un fichier .bat), j'obtiens le message d'erreur suivant : ORA-00903: nom de table non valide
Avez-vous une idée pour que le nom de table récupéré soit valide ?
Je vous remercie
MarieO
Partager