0
votes

Puis-je créer des vues paramétrées dans Oracle

J'ai une requête comme celle-ci xxx

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.


3 commentaires

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 TRUNC (sysdate, 'mm') ou le mois précédent add_months (Trunc (Sysdate, 'Mm'), - 1) ?


4 Réponses :


1
votes

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 (= sysdate code>).

Vous utilisez Le 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')


0 commentaires

0
votes

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 (dans un fichier, par exemple MyQuery.sql) à l'aide de Variables de liaison: xxx

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: xxx

ou si vous utilisez des chaînes de substitution '& 1.' et '& 2.' Au lieu de cela: xxx

alors vous pouvez transmettre les dates dans la ligne de commande comme ceci: xxx

(car & 1. signifie premier paramètre sur la ligne de commande, etc.)


0 commentaires

6
votes

à 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   


1 commentaires

Merci pour les aujourd'hui apprendre chaque jour une nouvelle fonctionnalité Oracle !



1
votes

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

  • Utilisation d'une table pour stocker les paramètres, vous avez essentiellement besoin de la valeur de paramètre et d'une description du paramètre.
  • Utilisation d'une fonction pour extraire la valeur de ce paramètre lorsque l'entrée est le nom du paramètre
  • Utilisation de l'appel de la fonction à l'intérieur de la vue.
  • Vous pouvez ensuite manipuler la vue automatiquement en modifiant les valeurs de la table des paramètres.

    table xxx

    fonction xxx

    vue xxx


0 commentaires