-------------------------------------------------------------------------------
-- corr_pl_bases.sql 
-------------------------------------------------------------------------------
-- traitement 3.
-- on adapte le modele d'ordre a la syntaxe PL/SQL :

create or replace function traitement3(
    le_jour sejour.jour%type)
    return integer
is
    le_nombre integer;
begin
    select count(*)
        into le_nombre
	from sejour
	where jour < le_jour;
    delete sejour
        where jour < le_jour;
    return le_nombre;
end;
/

-- tester : 
set serveroutput on
-- deux select suivants inutiles dans cet exercice mais visualise la base :
select * from client;
select * from village;
select * from sejour;
exec dbms_output.put_line(traitement3(364));
select * from sejour;
exec dbms_output.put_line(traitement3(365));
select * from sejour;

-------------------------------------------------------------------------------
-- traitement 3 par procedure avec variables out : 
-- on adapte la version ci-dessus par fonction :

create or replace procedure traitement3_out(
    le_jour sejour.jour%type,
    le_nombre out integer)
is
begin
    select count(*)
        into le_nombre
	from sejour
	where jour < le_jour;
    delete sejour
        where jour < le_jour;
end;
/

select * from sejour;
declare
    n int;
begin
    traitement3_out(364, n);
    dbms_output.put_line('Nombre de sejours detruits : '||n);
end;
/
select * from sejour;
declare
    n int;
begin
    traitement3_out(365, n);
    dbms_output.put_line('Nombre de sejours detruits : '||n);
end;
/
select * from sejour;

-------------------------------------------------------------------------------
-- traitement 1 :

-- vérifier création de la séquence
SELECT sequence_name 
FROM user_sequences 
WHERE sequence_name = 'SEQ_CLIENT';

-- créer la séquence si besoin
CREATE SEQUENCE SEQ_CLIENT
START WITH 3
INCREMENT BY 1;

create or replace function traitement1(
    le_nom client.nom%type,
    l_age client.age%type)
    return client.idc%type
is
    l_idc client.idc%type;
begin
    l_idc := seq_client.nextval;
    insert into client(idc, nom, age) 
        values(l_idc, le_nom, l_age);
    return l_idc;
end;
/

select * from client;
exec dbms_output.put_line('nouvel identifiant : '||traitement1('Jeanne', 23));
select * from client;
exec dbms_output.put_line('nouvel identifiant : '||traitement1('Jules', 23));
select * from client;

-------------------------------------------------------------------------------
-- traitement 4 : non fourni mais il n'y a pas de piege

-------------------------------------------------------------------------------

