J'ai une requête comme celle-ci et j'en ai besoin chaque mois, alors je voudrais le mettre dans une vue, mais comme la date change chaque mois, ce serait génial Pour avoir un paramètre de date que je peux passer à la vue lorsque vous l'appelez. Y a-t-il un moyen de savoir comment puis-je atteindre cela?
Je suis nouveau à Oracle, appréciez chaque aide. Merci youu. P> p>
4 Réponses :
Cette requête renvoie les données pour le mois em> em>, c'est-à-dire le mois Befort le mois en cours au moment de la requête (= Vous utilisez Le sysdate code>).
trunc code> avec
'mm' code> Pour obtenir les mois d'abord et l'arithmétique avec
add_months code>
P> SELECT ID,REF_ID,BATCHNO FROM reporttbl
where POSTING_DT >= add_months(trunc(sysdate,'MM'),-1) and POSTING_DT < trunc(sysdate,'MM')
Il existe des moyens de "paramétrer" une vue E.G. Utiliser des contextes Oracle, mais ils ne sont pas souvent utiles et ne sont certainement pas pour votre cas.
Si votre requête sélectionne vraiment d'une table avec uniquement les dates comme prédicats, alors une vue n'ajoute pas beaucoup de valeur non plus. Vous pouvez créer un script SQL fort> (dans un fichier, par exemple MyQuery.sql) à l'aide de Variables de liaison: p> alors chaque mois, vous pouvez simplement ouvrir le fichier et courez-le, et cela vous incitera aux 2 dates. Ou vous pouvez exécuter en tant que script comme celui-ci et il vous incitera également à vous: p> ou si vous utilisez des chaînes de substitution '& 1.' et '& 2.' Au lieu de cela: p> alors vous pouvez transmettre les dates dans la ligne de commande comme ceci: p> (car & 1. signifie premier paramètre sur la ligne de commande, etc.) p> p>
à partir de 19.6 Vous pouvez créer des vues paramétrées à l'aide de SQL MACROS .
create or replace function get_month ( tab dbms_tf.table_t, start_date date, end_date date ) return varchar2 sql_macro as retval int; begin return 'select * from tab where dt >= start_date and dt < end_date + 1'; end get_month; / create table t ( c1 int, dt date ); insert into t with rws as ( select level c1, add_months ( date'2019-12-25', level ) dt from dual connect by level <= 10 ) select * from rws; select * from get_month ( t, date'2020-06-01', date'2020-07-01' ); C1 DT 6 25-JUN-2020 00:00:00 select * from get_month ( t, date'2020-08-01', date'2020-09-01' ); C1 DT 8 25-AUG-2020 00:00:00
Merci pour les aujourd'hui apprendre chaque jour une nouvelle fonctionnalité Oracle i>!
Une autre façon de le faire consiste à utiliser une fonction qui récupère les paramètres d'une table, vous n'avez pas besoin de manipuler aucun DDL. L'idée ici est
table p> fonction p> vue p>
D'où l'appelez-vous? E.g une application, de SQL Developer / Plus / Toad?
@Tonyandrews du développeur Oracle SQL
Voulez-vous voir le mois Mois actuel i>
TRUNC (sysdate, 'mm') code> ou le mois précédent i> i>
add_months (Trunc (Sysdate, 'Mm'), - 1) code>?