Durée de tournage d'un film

[10 min]

Soit le modèle UML de la relation Film ci-après.

Film (méthode)

Soit la table Film implémentée sous Oracle et correspondant au modèle relationnel :

1
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 date d 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 date d sous la forme d'un entier de 7 chiffres.

    Exemple : to_number(to_char( to_date('20000101','YYYYMMDD'),'j'),'99999999') = 2451545

Solution

1
CREATE FUNCTION duree(debut date, fin date) RETURN integer
2
IS
3
BEGIN
4
RETURN to_number(to_char(fin,'j'),'99999999') - to_number(to_char(debut,'j'),'99999999');
5
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

1
CREATE VIEW vFilm AS
2
SELECT isan, titre, debut, fin, duree(debut,fin)
3
FROM Film;