Bonjour,
Je suis actuellement sur une base de données pour gérer une agence de location de bateau.
Je suis débutant avec sql et j'ai quelques soucis ...
Mes tables sont créées jusqu'ici pas de problème (location,client,bateau,capitaine,equipage). Voici les problèmes que je rencontre:
1. Un capitaine, un équipage et un bateau ne peuvent être associés qu'a une location à une date bien précise. Je voudrais réussir a empêcher de créer d'autre location si un capitaine ou un equipage ou un bateau sont déja loué pour cette date (une date pouvant s’étaler sur plusieurs jours). En effet un capitaine/un equipage/un bateau ne peuvent pas être a deux endroits différents en même temps
J'ai essayé de mettre des contraintes d'unicités mais, si par exemple je les mets sur la date de départ je ne peux plus créer de location avec cette date même avec d'autres bateaux, équipages ou capitaines ...
2. Je crée pas à pas mes fonctions et procédures, les tests indépendamment et je veux les regrouper au final dans un package. Je bloque sur une fonction SUPPRIMER. En effet je voudrais par exemple supprimer un capitaine et toutes ses informations de sa table, mais une fois supprimer je voudrais que les locations ou il est enregistré dans la table location disparaissent aussi ... Je pensais utiliser un DROP table location Constraint on cascade, mais ça à pas l'air très efficace ...
Je pensais utilisé ça, mais ça me compile la procédure avec des erreurs de compilations et je ne vois pas vraiment ou insérer le delete on cascade :
Je vous remercie, bonnes fêtes.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 CREATE OR REPLACE Procedure deleteCapitaine(ligneCapitaine IN CAPITAINE%ROWTYPE) IS nullNotAllowed EXCEPTION; PRAGMA EXCEPTION_INIT(nullNotAllowed,-20003); mess varchar2(200):=null; begin DELETE from CAPITAINE where capinum=ligneCapitaine.capinum IF ligneCapitaine.capinum IS NULL THEN mess:='Le numéro du Capitaine est obligatoire'; RAISE nullNotAllowed; END IF; EXCEPTION WHEN nullNotAllowed THEN dbms_output.put_line('le numero du capitaine est obligatoire'); dbms_output.put_line('sqlcode='|| sqlcode); dbms_output.put_line('sqlerrm='|| sqlerrm); WHEN OTHERS THEN dbms_output.put_line('ce numero de capitaine n''existe pas '); dbms_output.put_line('sqlcode='|| sqlcode); dbms_output.put_line('sqlerrm='|| sqlerrm); end; /
Partager