Skip to content
Snippets Groups Projects
Commit c6225b77 authored by Maxime  PIAT's avatar Maxime PIAT
Browse files

Initial commit

parents
No related branches found
No related tags found
No related merge requests found
DECLARE
v_ename VARCHAR(25);
v_sal NUMBER;
v_comm NUMBER;
v_dname VARCHAR(25);
BEGIN
SELECT ename, sal, comm, dname INTO v_ename, v_sal, v_comm, v_dname FROM emp e
JOIN dept d on e.deptno = d.deptno
WHERE ename='MILLER';
dbms_output.put_line(v_ename || ' ' || v_sal || ' ' || v_comm || ' ' || v_dname);
END;
/
\ No newline at end of file
DECLARE
col3 VARCHAR(25);
BEGIN
FOR i IN 1..10 LOOP
IF MOD(i, 2) = 0 THEN
col3 := i || ' est pair';
ELSE
col3 := i || ' est impair';
END IF;
INSERT INTO temp VALUES(i, i * 100, col3);
END LOOP;
END;
/
\ No newline at end of file
DECLARE
CURSOR c IS select sal, empno, ename FROM emp ORDER BY sal DESC;
v_sal NUMBER;
v_empno NUMBER;
v_ename VARCHAR(25);
BEGIN
OPEN c;
FOR i in 1..5 LOOP
FETCH c INTO v_sal, v_empno, v_ename;
INSERT INTO temp VALUES (v_sal, v_empno, v_ename);
END LOOP;
CLOSE c;
END;
/
\ No newline at end of file
DECLARE
CURSOR c IS select sal, empno, ename FROM emp WHERE (sal + NVL(comm, 0)) > 2000;
v_sal NUMBER;
v_empno NUMBER;
v_ename VARCHAR(25);
BEGIN
OPEN c;
LOOP
FETCH c INTO v_sal, v_empno, v_ename;
EXIT WHEN(c%NOTFOUND);
INSERT INTO temp VALUES (v_sal, v_empno, v_ename);
END LOOP;
CLOSE c;
END;
/
\ No newline at end of file
DECLARE
CURSOR c IS select sal, empno, ename FROM emp
WHERE sal > 4000
START WITH empno = 7902 CONNECT BY PRIOR MGR = empno;
v_sal NUMBER;
v_empno NUMBER;
v_ename VARCHAR(25);
BEGIN
OPEN c;
FETCH c INTO v_sal, v_empno, v_ename;
INSERT INTO temp VALUES (v_sal, v_empno, v_ename);
CLOSE c;
END;
/
drop table emp;
drop table dept;
create table dept(
deptno NUMBER(2) primary key,
dname VARCHAR2(14),
loc VARCHAR2(13));
create table emp(
empno number(4) primary key,
ename varchar2(10),
job varchar2(9),
mgr number(4),
hiredate date,
sal number(7,2),
comm number(7,2),
deptno number(2) references dept) ;
drop table temp ;
create table temp(
num_col1 number(9,4),
num_col2 number(9,4),
char_col char(55)) ;
insert into dept values
(10,'ACCOUNTING', 'NEW YORK') ;
insert into dept values
(20, 'RESEARCH','DALLAS');
insert into dept values
(30,'SALES','CHICAGO');
insert into emp values
(7369,'SMITH','CLERK',7902,to_date('17-12-1980','dd-mm-yyyy'),800,NULL,20) ;
insert into emp values
(7499,'ALLEN','SALESMAN',7698,to_date('20-2-1981','dd-mm-yyyy'),1600,300,30) ;
insert into emp values
(7521,'WARD','SALESMAN',7698,to_date('22-2-1981','dd-mm-yyyy'),1250,500,30) ;
insert into emp values
(7566,'JONES','MANAGER',7839,to_date('2-4-1981','dd-mm-yyyy'),2975,NULL,20) ;
insert into emp values
(7654,'MARTIN','SALESMAN',7698,to_date('28-9-1981','dd-mm-yyyy'),1250,1400,30) ;
insert into emp values
(7698,'BLAKE','MANAGER',7839,to_date('1-5-1981','dd-mm-yyyy'),2850,NULL,30) ;
insert into emp values
(7782,'CLARK','MANAGER',7839,to_date('9-6-1981','dd-mm-yyyy'),2450,NULL,10) ;
insert into emp values
(7788,'SCOTT','ANALYST',7566,to_date('13-7-1987','dd-mm-yyyy'),3000,NULL,20) ;
insert into emp values
(7839,'KING','PRESIDENT',NULL,to_date('17-11-1981','dd-mm-yyyy'),5000,NULL,10) ;
insert into emp values
(7844,'TURNER','SALESMAN',7698,to_date('8-9-1981','dd-mm-yyyy'),1500,0,30) ;
insert into emp values
(7876,'ADAMS','CLERK',7788,to_date('13-7-1987','dd-mm-yyyy'),1100,NULL,20) ;
insert into emp values
(7900,'JAMES','CLERK',7698,to_date('3-12-1981','dd-mm-yyyy'),950,NULL,30) ;
insert into emp values
(7902,'FORD','ANALYST',7566,to_date('3-12-1981','dd-mm-yyyy'),3000,NULL,20) ;
insert into emp values
(7934,'MILLER','CLERK',7782,to_date('23-1-1982','dd-mm-yyyy'),1300,NULL,10) ;
commit;
CREATE OR REPLACE PROCEDURE createdept_julliouf(numero_dept IN dept.deptno%type, dept_name IN dept.dname%type, localisation IN dept.loc%type)
IS
v_existe number;
BEGIN
SELECT COUNT(*) INTO v_existe FROM dept WHERE deptno = numero_dept;
IF v_existe = 0 THEN
INSERT INTO dept(deptno, dname, loc) VALUES (numero_dept, dept_name, localisation);
COMMIT;
ELSE
RAISE_APPLICATION_ERROR(-20404, 'Ce numéro de dept existe déjà !');
END IF;
END createdept_julliouf;
/
\ No newline at end of file
CREATE OR REPLACE FUNCTION salok_maxiouf(p_job IN SalIntervalle_F2.job%type, p_salaire IN SalIntervalle_F2.lsal%type)
RETURN NUMBER
IS
v_borne1 SalIntervalle_F2.lsal%type;
v_borne2 SalIntervalle_F2.lsal%type;
CURSOR c IS SELECT lsal, hsal FROM SalIntervalle_F2 s WHERE job = p_job;
BEGIN
OPEN c;
FETCH c INTO v_borne1, v_borne2;
CLOSE c;
IF p_salaire >= v_borne1 AND p_salaire <= v_borne2 THEN
RETURN 1;
END IF;
RETURN 0;
END salok_maxiouf;
/
\ No newline at end of file
CREATE OR REPLACE PROCEDURE raisesalary_julliouf(p_emp_id IN emp.empno%type, p_amount IN emp.sal%type)
IS
v_salaire_augmente emp.sal%type;
v_job emp.job%type;
v_salaire_min emp.sal%type;
v_salaire_max emp.sal%type;
BEGIN
SELECT sal INTO v_salaire_augmente FROM emp WHERE empno = p_emp_id;
v_salaire_augmente := v_salaire_augmente + p_amount;
dbms_output.put_line(v_salaire_augmente);
SELECT job INTO v_job FROM emp WHERE empno = p_emp_id;
SELECT lsal INTO v_salaire_min FROM SalIntervalle_F2 WHERE job = v_job;
SELECT hsal INTO v_salaire_max FROM SalIntervalle_F2 WHERE job = v_job;
IF v_salaire_augmente BETWEEN v_salaire_min AND v_salaire_max THEN
UPDATE emp SET sal = v_salaire_augmente WHERE empno = p_emp_id;
ELSE
RAISE_APPLICATION_ERROR(-20404, 'Une erreur sest produite !');
END IF;
END;
/
\ No newline at end of file
DECLARE
CURSOR c IS SELECT table_name FROM user_tables;
v_nom_table user_tables.table_name%type;
req VARCHAR2(200);
BEGIN
OPEN c;
LOOP
FETCH c INTO v_nom_table;
IF v_nom_table NOT LIKE '%!_old' ESCAPE '!' THEN
req := 'CREATE TABLE ' || v_nom_table || '_old AS SELECT * FROM ' || v_nom_table || ';';
dbms_output.put_line(req);
execute immediate req;
END IF;
END LOOP;
CLOSE c;
END;
/
\ No newline at end of file
CREATE OR REPLACE PACKAGE BODY pkg AS
CURSOR emp_par_dep_maxiouf(deptno dept.deptno%type) RETURN num_nom_emp IS
SELECT empno, ename FROM emp e WHERE e.deptno = deptno;
PROCEDURE raise_salary_maxiouf(p_emp_id IN emp.empno%type, p_amount IN emp.sal%type)
IS
v_salaire_augmente emp.sal%type;
v_job emp.job%type;
v_salaire_min emp.sal%type;
v_salaire_max emp.sal%type;
BEGIN
SELECT sal INTO v_salaire_augmente FROM emp WHERE empno = p_emp_id;
v_salaire_augmente := v_salaire_augmente + p_amount;
dbms_output.put_line(v_salaire_augmente);
SELECT job INTO v_job FROM emp WHERE empno = p_emp_id;
SELECT lsal INTO v_salaire_min FROM SalIntervalle_F2 WHERE job = v_job;
SELECT hsal INTO v_salaire_max FROM SalIntervalle_F2 WHERE job = v_job;
IF v_salaire_augmente BETWEEN v_salaire_min AND v_salaire_max THEN
UPDATE emp SET sal = v_salaire_augmente WHERE empno = p_emp_id;
ELSE
RAISE_APPLICATION_ERROR(-20404, 'Une erreur sest produite !');
END IF;
END;
PROCEDURE afficher_emp_maxiouf(deptno IN dept.deptno%type)
IS
v_empno emp.empno%type;
v_ename emp.ename%type;
BEGIN
OPEN emp_par_dep_maxiouf(deptno);
LOOP
FETCH emp_par_dep_maxiouf INTO v_empno, v_ename;
dbms_output.put_line('Lemployé numéro : ' || v_empno || ' se nomme ' || v_ename);
END LOOP;
CLOSE emp_par_dep_maxiouf;
END;
END pkg;
/
\ No newline at end of file
CREATE OR REPLACE PACKAGE pkg AS
TYPE num_nom_emp IS RECORD (c_empno emp.empno%type, c_ename emp.ename%type);
CURSOR emp_par_dep_maxiouf(deptno dept.deptno%type) RETURN num_nom_emp;
PROCEDURE raise_salary_maxiouf(p_emp_id IN emp.empno%type, p_amount IN emp.sal%type);
PROCEDURE afficher_emp_maxiouf(deptno IN dept.deptno%type);
END pkg;
/
\ No newline at end of file
CREATE TRIGGER sal_emp
BEFORE UPDATE OF sal ON emp
FOR EACH ROW
BEGIN
IF (:new.sal < :old.sal) THEN
RAISE_APPLICATION_ERROR(-20224, 'Le salaire ne peut diminuer.');
END IF;
END;
/
\ No newline at end of file
CREATE OR REPLACE TRIGGER dep_61_69
BEFORE INSERT OR UPDATE OF deptno ON dept
FOR EACH ROW
BEGIN
IF NOT (61 <= :new.deptno AND :new.deptno <= 69) THEN
RAISE_APPLICATION_ERROR(-20001, 'Département incorrect.');
END IF;
END;
/
\ No newline at end of file
CREATE OR REPLACE TRIGGER dep_emp
BEFORE INSERT OR UPDATE OF deptno ON emp
FOR EACH ROW
DECLARE
v_exist NUMBER;
BEGIN
SELECT COUNT(deptno) INTO v_exist FROM dept WHERE deptno = :new.deptno;
IF (v_exist = 0) THEN
INSERT INTO dept VALUES(:new.deptno, 'A SAISIR', 'A SAISIR');
END IF;
END;
/
\ No newline at end of file
CREATE OR REPLACE TRIGGER secu_we
BEFORE INSERT OR DELETE OR UPDATE ON emp
DECLARE
v_day CHAR;
BEGIN
SELECT TO_CHAR(SYSDATE, 'd') INTO v_day FROM DUAL;
IF v_day IN ('6', '7', '3') THEN
RAISE_APPLICATION_ERROR(-20024, 'Pas de modif le week-end.');
END IF;
END;
/
\ No newline at end of file
CREATE TABLE STATS_maxiouf (
TypeMaj VARCHAR2(25),
NbMaj NUMBER,
Date_derniere_Maj Date
);
INSERT INTO STATS_maxiouf (TypeMaj, NbMaj) VALUES ('INSERT', 0);
INSERT INTO STATS_maxiouf (TypeMaj, NbMaj) VALUES ('UPDATE', 0);
INSERT INTO STATS_maxiouf (TypeMaj, NbMaj) VALUES ('DELETE', 0);
/
\ No newline at end of file
CREATE OR REPLACE TRIGGER emp_stats
AFTER INSERT OR UPDATE OR DELETE ON emp
FOR EACH ROW
BEGIN
IF deleting THEN
UPDATE STATS_maxiouf SET NbMaj = NbMaj + 1, Date_derniere_Maj = SYSDATE WHERE TypeMaj = 'DELETE';
ELSIF inserting THEN
UPDATE STATS_maxiouf SET NbMaj = NbMaj + 1, Date_derniere_Maj = SYSDATE WHERE TypeMaj = 'INSERT';
ELSIF updating THEN
UPDATE STATS_maxiouf SET NbMaj = NbMaj + 1, Date_derniere_Maj = SYSDATE WHERE TypeMaj = 'UPDATE';
END IF;
END;
/
\ No newline at end of file
CREATE OR REPLACE TRIGGER nouv_job
BEFORE UPDATE ON emp
FOR EACH ROW
DECLARE
v_hsal SalIntervalle_F2.hsal%type;
v_lsal SalIntervalle_F2.lsal%type;
BEGIN
IF :new.job != 'PRESIDENT' THEN
:new.sal := :old.sal + 100;
END IF;
SELECT hsal, lsal INTO v_hsal, v_lsal FROM SalIntervalle_F2 WHERE job = :new.job;
IF v_lsal > :new.sal THEN
:new.sal := v_lsal;
ELSIF :new.sal > v_hsal THEN
:new.sal := v_hsal;
END IF;
END;
/
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment