APSQL

Fonction qui retourne une table

Ecrire une fonction qui retourne la liste de tous les exemplaires qui devrait être rendu et qui ne le sont toujours pas. En face du numéro de l'exemplaire, il est nécessaire de trouver le titre du film, la date d'emprunt ainsi que les coordonnées de l'emprunteur (nom, prénom, téléphone) du film emprunté.

La fonction portera le nom exemplairesEnRetard.

Exemple d'utilisation de la fonction:

Exemple de résultat attendu

Note: La ligne n°3 concernant l'exemplaire n°1 à était ajoutée sur la fiche n°4 afin de pouvoir tester la fonction en cours de création

Cette fonction peut être définie à l'aide du script suivant:

USE video;
go
CREATE FUNCTION exemplairesEnRetard() RETURNS @detailExemplaire 
	TABLE (numeroExemplaire int,
			titre nvarchar(80),
			dateEmprunt datetime,
			nomEmprunteur nvarchar(50),
			prenomEmprunteur nvarchar(50),
			telephoneEmprunteur char(14))AS
BEGIN
	INSERT INTO @detailExemplaire(numeroExemplaire, titre, dateEmprunt, nomEmprunteur, prenomEmprunteur, telephoneEmprunteur)
	SELECT md.exemplaire, f.titre, mf.creele, nom, prenom, telephone
	  FROM Magasin.Details md
	INNER JOIN Magasin.Exemplaires e ON e.numero=md.exemplaire
	INNER JOIN Films f ON e.film=f.numero
	INNER JOIN Magasin.Fiches mf ON md.fiche=mf.numero
	INNER JOIN Magasin.Clients mc ON mf.client=mc.numero
	 WHERE retourEffectifLe is null
	   AND retourPrevuLe<getdate();
	RETURN;
END;
			

Etant donné que cette fonction ne contient qu'une seule instruction, il est possible de la définir de la façon suivante:

USE video;
go
CREATE FUNCTION exemplairesEnRetard() RETURNS TABLE AS
	RETURN SELECT numeroExemplaire=md.exemplaire, f.titre, 
			dateEmprunt=mf.creele, 
			nomEmprunteur=nom, 
			prenomEmprunteur=prenom, 
			telephoneEmprunteur=telephone
	  FROM Magasin.Details md
	INNER JOIN Magasin.Exemplaires e ON e.numero=md.exemplaire
	INNER JOIN Films f ON e.film=f.numero
	INNER JOIN Magasin.Fiches mf ON md.fiche=mf.numero
	INNER JOIN Magasin.Clients mc ON mf.client=mc.numero
	 WHERE retourEffectifLe is null
	   AND retourPrevuLe<getdate();