From c5b3608b842128b431a005df117448eb12176d40 Mon Sep 17 00:00:00 2001 From: pascal Date: Mon, 15 Feb 2021 14:52:36 +0100 Subject: [PATCH] exo --- COURS/C-exo10-tligne.sql | 59 +++++++++++++++++++++++++++++++ COURS/C-exo10.sql | 76 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 135 insertions(+) create mode 100644 COURS/C-exo10-tligne.sql create mode 100644 COURS/C-exo10.sql diff --git a/COURS/C-exo10-tligne.sql b/COURS/C-exo10-tligne.sql new file mode 100644 index 0000000..6672c5f --- /dev/null +++ b/COURS/C-exo10-tligne.sql @@ -0,0 +1,59 @@ +SET echo OFF +SET verify OFF +SET feed OFF + +DROP TABLE tligne; +CREATE TABLE Tligne(ligne VARCHAR2(200)); +DROP TABLE tligne2; +CREATE TABLE Tligne2(ligne VARCHAR2(200)); + + +DECLARE +DnoProduit tProduit.noProduit%TYPE; +Ddesignation tProduit.designation%TYPE; +Dstock tProduit.stock%TYPE; +Dref tFournisseur.ref%TYPE; +DlistFourn VARCHAR(1000); +CURSOR r IS SELECT noProduit,designation,stock FROM tProduit WHERE noProduit NOT IN (SELECT noProduit FROM tProduitFourn); +CURSOR t IS SELECT noProduit,designation,stock FROM tProduit; +CURSOR s IS SELECT ref FROM tProduitFourn WHERE noProduit = DnoProduit; +BEGIN +OPEN r; +INSERT INTO Tligne VALUES('noProduit designation stock'); +FETCH r INTO DnoProduit,Ddesignation,Dstock; +WHILE r%FOUND +LOOP + INSERT INTO Tligne VALUES(DnoProduit||' '||Ddesignation||' '||Dstock); + FETCH r INTO DnoProduit,Ddesignation,Dstock; +END LOOP; +CLOSE r; +OPEN t; +INSERT INTO Tligne2 VALUES('noProduit designation stock reference fournisseur'); +FETCH t INTO DnoProduit,Ddesignation,Dstock; +WHILE t%FOUND +LOOP + DlistFourn :=''; + OPEN s; + FETCH s INTO Dref; + WHILE s%FOUND + LOOP + DlistFourn := DlistFourn||' '||Dref; + FETCH s INTO Dref; + END LOOP; + CLOSE s; + INSERT INTO Tligne2 VALUES(DnoProduit||' '||Ddesignation||' '||Dstock||' '||DlistFourn); + FETCH t INTO DnoProduit,Ddesignation,Dstock; +END LOOP; +CLOSE t; + +END; +. +/ + + + +SELECT * FROM Tligne; +SELECT * FROM Tligne2; +SET echo ON +SET verify ON +SET feed ON diff --git a/COURS/C-exo10.sql b/COURS/C-exo10.sql new file mode 100644 index 0000000..2530b07 --- /dev/null +++ b/COURS/C-exo10.sql @@ -0,0 +1,76 @@ +set echo off; +set verify off; +set feed off; + +DELETE FROM PRODUITFOURN WHERE NUMPRODUIT = 'P0002'; +DELETE FROM PRODUITFOURN WHERE NUMPRODUIT = 'P0004'; + +DROP TABLE TproduitAvFourn PURGE; +DROP TABLE TproduitNoFourn PURGE; + +CREATE TABLE TproduitAvFourn( + NOMFOURN VARCHAR2(100), + NUMPRODUIT CHAR(5), + DESIGNATION VARCHAR2(100), + STOCK NUMBER, + PRIXV NUMBER(10, 2), + CODERAYON CHAR(5) +); + +CREATE TABLE TproduitNoFourn( + NUMPRODUIT CHAR(5), + DESIGNATION VARCHAR2(100), + STOCK NUMBER, + PRIXV NUMBER(10, 2), + CODERAYON CHAR(5) +); + +DECLARE + dNumProd CHAR(5); + dTest NUMBER; + dDesign varchar2(100); + dStock NUMBER; + dPrix NUMBER(10,2); + dCodeR CHAR(5); + dNomF varchar2(100); + dListeF varchar2(1000); + + CURSOR r IS SELECT * FROM PRODUIT; + CURSOR p IS SELECT f.NOM FROM FOURNISSEUR f, PRODUITFOURN pf + WHERE dNumProd = pf.NUMPRODUIT AND f.REFFOURN = pf.REFFOURN; + +BEGIN + OPEN r; + FETCH r INTO dNumProd, dDesign, dStock, dPrix, dCodeR; + + WHILE r%FOUND LOOP + SELECT count(NUMPRODUIT) INTO dTest FROM PRODUITFOURN + WHERE NUMPRODUIT = dNumProd; + + IF dTest != 0 THEN + OPEN p; + FETCH p INTO dNomF; + WHILE p%FOUND LOOP + dListeF := dListeF||' '||dNomF; + FETCH p INTO dNomF; + END LOOP; + CLOSE p; + INSERT INTO TproduitAvFourn VALUES (dListeF, dNumProd,dDesign,dStock,dPrix,dCodeR); + dListeF := ''; + ELSE + INSERT INTO TproduitNoFourn VALUES (dNumProd,dDesign,dStock,dPrix,dCodeR); + END IF; + + FETCH r INTO dNumProd, dDesign, dStock, dPrix, dCodeR; + END LOOP; + CLOSE r; +END; +. +/ + +SELECT * FROM TproduitAvFourn; +SELECT * FROM TproduitNoFourn; + +set feed on; +set verify on; +set echo on;