Durée de tournage d'un film
[10 min]
Soit le modèle UML de la relation Film ci-après.
Soit la table Film
implémentée sous Oracle et correspondant au modèle relationnel :
Film(#isan:char(33),titre:varchar2,debut:date,fin:date)
Question
Écrire une fonction duree
permettant de retourner un nombre entier de jours entre deux dates passées en argument.
Indice
On pourra utiliser la conversion des dates en Julian day, c'est à dire le nombre de jours depuis le 01/01/-4712.
to_char(d,'j')
retourne le Julian day de la dated
sous la forme d'une chaîne de caractères.Exemple :
to_char( to_date('20000101','YYYYMMDD')) = '2451545'
to_number(to_char(d,'j'),'9999999')
retourne le Julian day de la dated
sous la forme d'un entier de 7 chiffres.Exemple :
to_number(to_char( to_date('20000101','YYYYMMDD'),'j'),'99999999') = 2451545
Solution
CREATE FUNCTION duree(debut date, fin date) RETURN integer
IS
BEGIN
RETURN to_number(to_char(fin,'j'),'99999999') - to_number(to_char(debut,'j'),'99999999');
END;
Question
Créer en SQL une vue vFilm
affichant tous les attributs de Film
, avec une colonne supplémentaire affichant la durée.
Solution
CREATE VIEW vFilm AS
SELECT isan, titre, debut, fin, duree(debut,fin)
FROM Film;