Considérez ce tableau (simplifié) qui pourrait avoir beaucoup de lignes:Existe-t-il une fonction d'analyse Oracle qui peut aider à transformer ce code SQL en vue?
CREATE TABLE v
(
m VARCHAR2(50),
ts date,
v NUMBER
)
/
ensuite les éléments suivants fonctionne très bien comme une requête:
SELECT
m,
MIN(ts) min_ts,
MAX(ts) max_ts
FROM
v
WHERE
TO_DATE('2016-01-10','YYYY-MM-DD') <= ts AND
ts < TO_DATE('2016-01-20','YYYY-MM-DD') AND
m = '123'
GROUP BY
m
/
Lorsque le TO_DATES et « 123 » représentent des critères de filtrage fournis par l'utilisateur . Maintenant, lorsque je tente de convertir cette SQL à une vue et de mettre les critères, je rencontre des problèmes:
CREATE OR REPLACE VIEW vv AS
SELECT
m,
MIN(ts) min_ts,
MAX(ts) max_ts
FROM
v
GROUP BY
m
/
Je ne peux pas fournir le filtre de date de ts sur la vue comme Oracle déjà ai regroupé le résultat , par exemple, ce qui suit ne fonctionnera pas (ORA-00904: « TS »: identificateur non valide):
SELECT
*
FROM
vv
WHERE
TO_DATE('2016-01-10','YYYY-MM-DD') <= ts AND
ts < TO_DATE('2016-01-20','YYYY-MM-DD') AND
m='123'
/
Ainsi sont-il des fonctions analytiques Oracle etc. qui peuvent aider dans ce scénario pour transformer le SQL en vue?
Faut-il être appelable comme ça, dans une clause 'from'? Voulez-vous le joindre à d'autres choses? (Vous vous demandez si une fonction renvoyant un curseur ref pourrait convenir, sinon une vue paramétrée utilisant un contexte est possible mais peut prêter à confusion, et le contexte doit être construit, ou une fonction renvoyant une collection - dépend de l'utilisation requise) –
Vous devez le faire avec une fonction de table définie par l'utilisateur. Oracle (et SQL en général) n'a pas le concept de vues paramétrées. –