Fonctions SQL et PL/SQL -- Base Bibliothèque

Pour commencer

On démarre avec l'environnement de PostgreSQL

On reprend (presque) la base bibliothèque que vous connaissez déjà. Vous allez devoir créer votre propre base à partir des fichier bibliotheque.sql et mis insert-bibliotheque.sql à disposition. Récupérez ce ficher et enregistrez-le chez vous.

Connectez-vous à la base biblio. Votre première action doit être de modifier votre mot de passe sous postgresql. Vous vous déconnecterez immédiatement pour tester votre nouvelle connexion.


vous@infoXXX$ psql -h slinux2 biblio
password : 
biblio=# alter user votre_nom password 'votre-nouveau-mot-de-passe';
biblio=# \q
	

Reconnectez-vous. Testez les commandes suivantes pour vous familiariser avec l'environnement de postgresql.


vous@infoXXX$ psql -h slinux2 biblio
biblio=# \dt
biblio=# \d livre
biblio=# \h
biblio=# \h select
biblio=# \h create function
	

Création de la base de données

Créez une nouvelle base qui portera le nom de biblio_votrenom, puis connectez vous sur cette nouvelle base, et enfin chargez le fichier de création et de peuplement des tables :


biblio# create database biblio_votrenom;
CREATE DATABASE
biblio=# \c biblio_votrenom
Vous êtes maintenant connecté à la base de données « biblio_votrenom ».
biblio_votrenom=#\i 'bibliotheque.sql'
psql:biblio2.sql:5: INFO:  CREATE TABLE créera des séquences implicites ...
psql:biblio2.sql:5: INFO:  CREATE TABLE / PRIMARY KEY créera un index ...
...
INSERT 0 1
biblio_votrenom=# 
	

Écrire des fonctions...

Ça y est, vous êtes prêts à travailler. Pour les exercices suivants, vous devrez choisir d'écrire des fonctions soit en SQL, soit en PL/SQL. Vous devrez toujours tester vos fonctions (donc écrire une requête appelant votre fonction et vérifier son résultat).

Vous devrez travailler en créant vos fonctions dans un fichier mesFctsBiblio.sql que éditerez à côté (à l'aide de votre éditeur préféré, gedit par exemple) que vous re-chargerez à chaque nouvelle fonction dans votre base.

Écrire une fonction nbre_exemplaires qui retourne le nombre de livres associés à une oeuvre.

Écrire une fonction est_emprunte qui retourne un booléen suivant qu'un livre est actuellement emprunté ou non (attention, il n'y a pas d'attribut sorti dans votre base, contrairement à la base du tp de la semaine dernière).

Écrire une fonction les_livres_presents qui retourne les livres actuellement présents sur les rayons de la bibliothèque.

Écrire une fonction nbre_emprunts qui retourne le nombre de livres empruntés associés à une même oeuvre.

Écrire une fonction les_plus_empruntes qui retourne les n oeuvres les plus empruntées. En cas d'égalité, on rangera les oeuvres par ordre alphabétique sur leur titre.

Écrire une fonction infos_oeuvres qui, pour une oeuvre donnée, retourne une chaîne de caractères qui contient des informations sur cette oeuvre. Si l'oeuvre est écrite par une seule personne, alors la chaîne retournée devra être Titre : Le titre de l'oeuvre - Auteur : Le nom de l'auteur; si l'oeuvre a été écrite par plusieurs personnes, alors la chaîne retournée sera Titre : Le titre de l'oeuvre - Auteurs : Le nom du premier auteur et al.. Appelez cette fonction sur toutes les oeuvres de la base.

Vous devez maintenant modifier votre base et ajouter un champ empruntable de type booléen à la table livre. Ce champ devra prendre la valeur True par défaut. Ce champ permettra d'exclure du prêt un exemplaire de chaque oeuvre bien représentée dans la bibliothèque.

Écrire une fonction sort_du_pret qui, pour une oeuvre donnée, positionne à False ce champ empruntable si l'oeuvre possède au moins trois exemplaires dans la base, et il en existe au moins un qui n'est pas emprunté actuellement. Dans ce cas, c'est l'exemplaire de l'oeuvre non emprunté avec le plus petit identifiant dont on bascule le champ empruntable à faux. Appelez cette fonction pour que ce travail soit effectué sur tous les livres de la base.

Comment faire pour que cette fonction puisse être régulièrement appelée sans provoquer l'exclusion du prêt de plusieurs livres pour une même oeuvre ? Modifiez votre fonction.