la création de vues paramétrées dans oracle11g
J'ai un gros requête à la nidification et à gauche de la rejoindre et de l'Ineed à créer une vue d'en sortir, afin de ne pas l'exécuter à partir de l'application. Le problème est que j'ai besoin de la date et de certains autres domaines comme paramètres d'entrée, car elle varie à partir de l'extrémité avant de chaque demande.
Je viens de regardé et j'ai vu quelques posts se référant à l'aide de SYS_CONTEXT pour paramétrée points de vue et ont besoin de savoir exactement comment puis-je créer la vue par exemple avec 2 paramètres - fromdate, todate
et comment j'invoque le point de vue de l'application.
Juste pour info, je suis en utilisant graal/groovy pour le développement de l'application.
et voici la requête que je veux créer la vue de..
select
d.dateInRange as dateval,
eventdesc,
nvl(td.dist_ucnt, 0) as dist_ucnt
from (
select
to_date(fromdate,'dd-mon-yyyy') + rownum - 1 as dateInRange
from all_objects
where rownum <= to_date(fromdate,'dd-mon-yyyy') - to_date(todate,'dd-mon-yyyy') + 1
) d
left join (
select
to_char(user_transaction.transdate,'dd-mon-yyyy') as currentdate,
count(distinct(grauser_id)) as dist_ucnt,
eventdesc
from
gratransaction, user_transaction
where gratransaction.id = user_transaction.trans_id and
user_transaction.transdate between to_date(fromdate,'dd-mon-yyyy') and to_date(todate,'dd-mon-yyyy')
group by to_char(user_transaction.transdate, 'dd-mon-yyyy'), eventdesc
) td on td.currentdate = d.dateInRange order by d.dateInRange asc
OriginalL'auteur pri_dev | 2012-01-26
Vous devez vous connecter pour publier un commentaire.
Le contexte de la méthode est décrite ici: http://docs.oracle.com/cd/B28359_01/network.111/b28531/app_context.htm
par exemple (exemple adapté à partir du lien ci-dessus)
Ensuite, fixer les dates dans votre application avec:
Ensuite, interroger les paramètres avec:
L'avantage de cette approche est qu'il est très requête-friendly; il n'implique pas de DDL ou DML au moment de l'exécution, et par conséquent il n'y a pas de transactions à s'inquiéter, et il est très rapide, car il n'implique pas de SQL - PL/SQL changement de contexte.
Sinon:
Si le contexte de la méthode et de Jean variables de package méthode ne sont pas possible pour vous, une autre est d'insérer les paramètres dans un tableau (par exemple, une table temporaire globale, si vous exécutez la requête dans la même session), puis rejoindre à la table de la vue. L'inconvénient est que, maintenant, vous devez vous assurer que vous exécutez certains DML pour insérer les paramètres chaque fois que vous voulez exécuter la requête.
Pourquoi vous pouvez pas utiliser les procédures, les fonctions ou les colis? Si vous utilisez Oracle, il n'y a aucune bonne raison pour vous de les éviter.
Certaines personnes ont un accès en lecture seule à des bases de données.
OriginalL'auteur Jeffrey Kemp
J'ai juste fait une solution de contournement pour ce problème ennuyeux Oracle inconvénient. Comme ce
il nécessite encore un paquet, mais au moins je peux l'utiliser dans plus convinient façon:
je ne suis pas sûr au sujet de la performance...
sysdate
). Vous pouvez tout aussi bien utilisersysdate
directement dans la vue sans avoir besoin d'un paquet.Salut, Jeffrey. sysdate est juste un exemple - vous pouvez mettre n'importe quelle valeur. L'essentiel ici est que vous pouvez réutiliser votre requête (dans mon exemple c'est "sélectionner 1, 2, prm_date de double") comme d'un point de vue, mais avec un paramètre externe (prm_date).
Si vous êtes suggérant de remplacer le point de vue entièrement avec une requête à l'intérieur d'un pipeline de la fonction?
Oui, exactement. Tout aussi une alternative.
Ce n'est plus semblable à la MS "fonctions à valeur de table" qui, pour moi, c'était assez simple.
OriginalL'auteur Neco
Pour utiliser des paramètres dans une vue est une façon de créer un package qui permet de définir les valeurs des paramètres et les fonctions qui peuvent être appelées pour obtenir ces valeurs. Par exemple:
Ensuite votre point de vue peut être créé ainsi:
Et pour l'exécuter, vous devez définir les valeurs premières:
Et appelle ensuite pour qu'il utilise ces valeurs:
OriginalL'auteur John Doyle