procedures
This commit is contained in:
66
banque.md
66
banque.md
@@ -24,27 +24,28 @@ Pour les entités vous utiliserez le singuler et écrirez le tout en minuscule.
|
|||||||
|
|
||||||
- Séance 1 : [Le schéma Entités-Relations](banque.erd.md)
|
- Séance 1 : [Le schéma Entités-Relations](banque.erd.md)
|
||||||
|
|
||||||
# Séance 2 : Implémentation du modèle
|
- Séance 2 : [Implémentation du modèle](banques.tables.md)
|
||||||
|
|
||||||
|
- Séance 3 : [Les procédures](banques.procedures.md)
|
||||||
|
|
||||||
Voir les adresses des serveurs [postgreSQL](https://sources.neotech.fr/Universite/tp/src/branch/main/geii3_2025.md)
|
Voir les adresses des serveurs [postgreSQL](https://sources.neotech.fr/Universite/tp/src/branch/main/geii3_2025.md)
|
||||||
|
|
||||||
Voir la syntaxe de [postgreSQL](syntaxe.md)
|
Voir la syntaxe de [postgreSQL](syntaxe.md)
|
||||||
|
|
||||||
|
```sql
|
||||||
|
insert into holder (type) values ('BANK')
|
||||||
|
returning holder;
|
||||||
|
|
||||||
|
insert into bank (id, name) values (1, 'Banque de l''Est');
|
||||||
|
```
|
||||||
|
|
||||||
|
La création d'un titulaire s'effectue en deux étapes :
|
||||||
|
|
||||||
- Créer un compte individuel pour _Françoise Zanetti_, née le 12 avril 1995.
|
- Créer un compte individuel pour _Françoise Zanetti_, née le 12 avril 1995.
|
||||||
- Créer une entreprise nommée _Boulangerie de Valorgue_, créée le 19 août 2014, numéro d’immatriculation FR19803269968.
|
- Créer une entreprise nommée _Boulangerie de Valorgue_, créée le 19 août 2014, numéro d’immatriculation FR19803269968.
|
||||||
- Ajouter un nouveau titulaire : _Justin Hébrard_ né le 11/03/1993.
|
- Ajouter un nouveau titulaire : _Justin Hébrard_ né le 11/03/1993.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
```sql
|
|
||||||
insert into holder (type) values ('BANK') returning holder;
|
|
||||||
```
|
|
||||||
|
|
||||||
```sql
|
|
||||||
insert into bank (id, name) values (1, 'Banque de l''Est');
|
|
||||||
```
|
|
||||||
|
|
||||||
#### 1.1 Contraintes à respecter
|
#### 1.1 Contraintes à respecter
|
||||||
|
|
||||||
- Chaque `person` ou `company` doit correspondre à exactement un seul `holder`.
|
- Chaque `person` ou `company` doit correspondre à exactement un seul `holder`.
|
||||||
@@ -109,15 +110,6 @@ Cette procédure doit :
|
|||||||
|
|
||||||
### 2. Les comptes
|
### 2. Les comptes
|
||||||
|
|
||||||
```sql
|
|
||||||
create table account (
|
|
||||||
"id" bigint primary key generated always as identity,
|
|
||||||
"creation_date" date default current_date,
|
|
||||||
"balance" decimal check (balance >= 0),
|
|
||||||
"currency_code" text references currency (code)
|
|
||||||
);
|
|
||||||
```
|
|
||||||
|
|
||||||
- Le solde des comptes ne peuvent être négatifs.
|
- Le solde des comptes ne peuvent être négatifs.
|
||||||
- Créez un compte joint à 50/50 pour Françoise et Justin.
|
- Créez un compte joint à 50/50 pour Françoise et Justin.
|
||||||
|
|
||||||
@@ -208,27 +200,12 @@ ERROR: La somme des parts (1.1000) doit être égale à 1.0000
|
|||||||
```
|
```
|
||||||
### 3. Monnaies et taux de change
|
### 3. Monnaies et taux de change
|
||||||
|
|
||||||
```sql
|
|
||||||
create table currency (
|
|
||||||
"code" text primary key
|
|
||||||
);
|
|
||||||
```
|
|
||||||
|
|
||||||
```sql
|
```sql
|
||||||
insert into currency values ('EUR');
|
insert into currency values ('EUR');
|
||||||
insert into currency values ('YEN');
|
insert into currency values ('YEN');
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
```sql
|
|
||||||
create table exchange_rate (
|
|
||||||
"currency_code" text references currency(code) on delete cascade,
|
|
||||||
"date" date ,
|
|
||||||
"rate" decimal not null,
|
|
||||||
primary key (currency_code, date)
|
|
||||||
);
|
|
||||||
```
|
|
||||||
|
|
||||||
```sql
|
```sql
|
||||||
insert into exchange_rate values
|
insert into exchange_rate values
|
||||||
('YEN', '2025-11-03', 177.57),
|
('YEN', '2025-11-03', 177.57),
|
||||||
@@ -238,27 +215,6 @@ insert into exchange_rate values
|
|||||||
('YEN', '2025-11-07', 176.99);
|
('YEN', '2025-11-07', 176.99);
|
||||||
```
|
```
|
||||||
|
|
||||||
### 4. Les opérations et transactions
|
|
||||||
|
|
||||||
Implémenter les transactions et opérations.
|
|
||||||
|
|
||||||
```sql
|
|
||||||
create table transaction (
|
|
||||||
"id" bigint primary key generated always as identity,
|
|
||||||
"transaction_date" timestamp default current_timestamp,
|
|
||||||
"amount" decimal check (amount > 0)
|
|
||||||
);
|
|
||||||
```
|
|
||||||
|
|
||||||
```sql
|
|
||||||
create table operation (
|
|
||||||
"id" bigint primary key generated always as identity,
|
|
||||||
"transaction_id" bigint references transaction(id),
|
|
||||||
"account_id" bigint references account(id),
|
|
||||||
"amount" decimal check (amount > 0),
|
|
||||||
"direction" text check (direction in ('DEBIT', 'CREDIT'))
|
|
||||||
);
|
|
||||||
```
|
|
||||||
|
|
||||||
#### Dépôts et retraits
|
#### Dépôts et retraits
|
||||||
|
|
||||||
|
|||||||
90
banque.procedures.md
Normal file
90
banque.procedures.md
Normal file
@@ -0,0 +1,90 @@
|
|||||||
|
# Les procédures
|
||||||
|
|
||||||
|
Les procédures permettent d'exécuter plusieurs opérations en un seul appel dans un bloc de code
|
||||||
|
|
||||||
|
Si une erreur survient **rien** n'est enregistré
|
||||||
|
|
||||||
|
## Banque
|
||||||
|
|
||||||
|
```sql
|
||||||
|
create or replace procedure add_bank (
|
||||||
|
name text
|
||||||
|
)
|
||||||
|
language plpgsql
|
||||||
|
as $$
|
||||||
|
declare
|
||||||
|
v_holder_id bigint;
|
||||||
|
begin
|
||||||
|
|
||||||
|
insert into holder(type) values ('BANK')
|
||||||
|
returning id into v_holder_id;
|
||||||
|
|
||||||
|
insert into bank(id, name)
|
||||||
|
values (v_holder_id, name);
|
||||||
|
|
||||||
|
raise notice 'Titulaire créé : % = %',
|
||||||
|
v_holder_id, name;
|
||||||
|
end;
|
||||||
|
$$;
|
||||||
|
```
|
||||||
|
|
||||||
|
## Individu
|
||||||
|
|
||||||
|
```sql
|
||||||
|
create or replace procedure add_person (
|
||||||
|
p_firstname text,
|
||||||
|
p_lastname text,
|
||||||
|
p_birthdate date
|
||||||
|
)
|
||||||
|
language plpgsql
|
||||||
|
as $$
|
||||||
|
declare
|
||||||
|
v_holder_id bigint;
|
||||||
|
begin
|
||||||
|
|
||||||
|
insert into holder(type) values ('PERSON')
|
||||||
|
returning id into v_holder_id;
|
||||||
|
|
||||||
|
insert into person(id, firstname, lastname, birthdate)
|
||||||
|
values (v_holder_id, p_firstname, p_lastname, p_birthdate);
|
||||||
|
|
||||||
|
raise notice 'Titulaire créé : % = % %',
|
||||||
|
v_holder_id, p_firstname, p_lastname;
|
||||||
|
end;
|
||||||
|
$$;
|
||||||
|
```
|
||||||
|
|
||||||
|
```sql
|
||||||
|
call add_person('Françoise', 'Zanetti', '1995-04-12');
|
||||||
|
call add_person('Justin', 'Hébrard', '1993-03-11');
|
||||||
|
```
|
||||||
|
|
||||||
|
## Société
|
||||||
|
|
||||||
|
```sql
|
||||||
|
create or replace procedure add_company (
|
||||||
|
p_name text,
|
||||||
|
p_registration_number text,
|
||||||
|
p_created_at date
|
||||||
|
)
|
||||||
|
language plpgsql
|
||||||
|
as $$
|
||||||
|
declare
|
||||||
|
v_holder_id bigint;
|
||||||
|
begin
|
||||||
|
|
||||||
|
insert into holder(type) values ('COMPANY')
|
||||||
|
returning id into v_holder_id;
|
||||||
|
|
||||||
|
insert into company(id, name, registration_number, created_at)
|
||||||
|
values (v_holder_id, p_name, p_registration_number, p_created_at);
|
||||||
|
|
||||||
|
raise notice 'Titulaire créé : % = % %',
|
||||||
|
v_holder_id, p_name, p_registration_number;
|
||||||
|
end;
|
||||||
|
$$;
|
||||||
|
```
|
||||||
|
|
||||||
|
```sql
|
||||||
|
call add_company('Boulangerie de Valorgue', 'FR19803269968', '2014-08-19');
|
||||||
|
```
|
||||||
@@ -97,7 +97,7 @@ create table exchange_rate (
|
|||||||
create table account (
|
create table account (
|
||||||
"id" bigint primary key generated always as identity,
|
"id" bigint primary key generated always as identity,
|
||||||
"opened_at" date not null default current_date,
|
"opened_at" date not null default current_date,
|
||||||
"balance" numeric(18,6) not null default 0,
|
"balance" decimal not null default 0 check (balance >= 0),
|
||||||
"currency_code" text not null references currency (code)
|
"currency_code" text not null references currency (code)
|
||||||
);
|
);
|
||||||
```
|
```
|
||||||
|
|||||||
Reference in New Issue
Block a user