Canalblog
Editer l'article Suivre ce blog Administration + Créer mon blog
Publicité
4line's code
21 avril 2009

tache 3

REM 1) passer les commandes AT en ECT après 24 H


CREATE OR REPLACE PROCEDURE  passerATenECT
        IS
    CURSOR mon_curseur IS
              SELECT IdO
        FROM oorder
        WHERE OrderState = 'AT'
            AND floor(((sysdate-OrderDate)*24*60*60)/3600) > 24;

    AT_ECT mon_curseur%ROWTYPE;

    BEGIN

        OPEN mon_curseur;
           FETCH mon_curseur INTO AT_ECT;
           WHILE mon_curseur%FOUND
           LOOP
               FETCH mon_curseur INTO AT_ECT;
            UPDATE Oorder
                SET OrderState = 'ECT'
                WHERE IdO = AT_ECT.IdO;
            StockManager(AT_ECT.IdO);
           END LOOP;
           CLOSE mon_curseur;
    END;
/


REM 1.5) rajouter une colonne OrderDateECT dans la table Order

ALTER TABLE Oorder
ADD OrderDateECT Date;

REM 2) Processus StockManager : passer les commandes ECT en T si stock suffisant
REM                sinon les met en attente de reappro (et genere une demande de reappro)<-simple affichage






REM 3) Créer la table SUPPLY


DROP TABLE Supply CASCADE CONSTRAINTS;
CREATE TABLE Supply (tk number, appro sys.XMLTYPE);

DROP SEQUENCE seq_supply;
CREATE SEQUENCE seq_supply start with 1 INCREMENT BY 1;

INSERT INTO Supply(tk,appro) VALUES (seq_supply.nextval, sys.XMLType.createXML(
'<?xml version="1.0"?>
<product>
    <order>123</order>
    <idProduct>1</idProduct>
    <quantity>12</quantity>
</product>'));

CREATE INDEX proc_idx ON Supply(appro)
INDEXTYPE IS ctxsys.context
parameters('FILTER ctxsys.null_filter SECTION GROUP ctxsys.path_section_group');


REM 4) Processus SupplyManager : mettre à jour le stock d'apres la table SUPPLY
REM                 et traiter les commandes ECT en attente de reappro concernees

CREATE OR REPLACE TRIGGER SupplyManager
AFTER INSERT ON Supply
FOR EACH ROW
DECLARE
    res_order oorder.IdO%TYPE :=0;
    res_product product.IdProd%TYPE :=0;
    res_qt product.StockQuantity%TYPE :=0;
    complet INTEGER :=1;
    CURSOR mon_curseur IS SELECT reserve FROM orderline WHERE IdO = res_order;
    ligne_order mon_curseur%ROWTYPE;
BEGIN
    SELECT s.appro.extract('/product/order/text()').getStringVal() INTO res_order FROM supply s WHERE tk = :new.tk;
    SELECT s.appro.extract('/product/idProduct/text()').getStringVal() INTO res_product FROM supply s WHERE tk = :new.tk;
    SELECT s.appro.extract('/product/quantity/text()').getStringVal() INTO res_qt FROM supply s WHERE tk = :new.tk;
    UPDATE OrderLine
        SET reserve = 1
        WHERE IdO = res_order
            AND IdProduct = res_product;
    complet := 1;
    OPEN mon_curseur;
       FETCH mon_curseur INTO ligne_order;
       WHILE mon_curseur%FOUND
       LOOP
        IF ligne_order.reserve = 0 THEN
            complet := 0;
        END IF;
           FETCH mon_curseur INTO ligne_order;
       END LOOP;
       CLOSE mon_curseur;
    IF complet = 1 THEN
        UPDATE Oorder
        SET OrderState = 'T'
        WHERE IdO = res_order;
    END IF;
END;
/

REM 5) Procédure de création de job

VARIABLE jobno number;
BEGIN
   DBMS_JOB.SUBMIT(:jobno, 'passerATenECT;', SYSDATE, 'SYSDATE + 1/(24*60*60)');
   commit;
END;
/


commit;

Publicité
Commentaires
W
create or replace PROCEDURE StockManager(pido orderline.ido%type)<br /> is<br /> etatstock integer ;<br /> CURSOR stock_curseur IS<br /> SELECT o.idol, o.quantity, p.stockquantity,p.idprod<br /> FROM orderline o,product p<br /> WHERE pido = o.ido and o.idproduct = p.idprod;<br /> ligne_order stock_curseur%ROWTYPE;<br /> begin<br /> etatstock:=1;<br /> OPEN stock_curseur;<br /> FETCH stock_curseur INTO ligne_order;<br /> WHILE stock_curseur%FOUND<br /> LOOP<br /> IF ligne_order.quantity > ligne_order.stockquantity THEN<br /> etatstock:=0;<br /> else update orderline set reserve=1 where orderline.idol= ligne_order.idol;<br /> update product set stockquantity=stockquantity- ligne_order.quantity where product.idprod=ligne_order.idprod; <br /> end if;<br /> FETCH stock_curseur INTO ligne_order;<br /> end loop;<br /> close stock_curseur;<br /> if etatstock =1<br /> then<br /> update oorder set orderstate= 'T' where pido= oorder.ido;<br /> else<br /> raise_application_error(-20007, 'réappro');<br /> end if;<br /> end;
A
create or replace PROCEDURE StockManager(pido orderline.ido%type)<br /> is<br /> etatstock integer ;<br /> CURSOR stock_curseur IS<br /> SELECT o.idol, o.quantity, p.stockquantity<br /> FROM orderline o,product p<br /> WHERE pido = o.ido and o.idproduct = p.idprod;<br /> ligne_order stock_curseur%ROWTYPE;<br /> begin<br /> etatstock:=1;<br /> OPEN stock_curseur;<br /> FETCH stock_curseur INTO ligne_order;<br /> WHILE stock_curseur%FOUND<br /> LOOP<br /> IF ligne_order.quantity > ligne_order.stockquantity THEN<br /> etatstock:=0;<br /> else update orderline set reserve=1 where orderline.idol= ligne_order.idol;<br /> <br /> end if;<br /> FETCH stock_curseur INTO ligne_order;<br /> end loop;<br /> close stock_curseur;<br /> if etatstock =1<br /> then<br /> update oorder set orderstate= 'T' where pido= oorder.ido;<br /> else<br /> raise_application_error(-20007, 'réappro');<br /> end if;<br /> end;<br /> <br /> <br /> <br /> rem compile mais manque le traitement de la reserve ainsi que la soustration des produits en stock
B
create or replace<br /> PROCEDURE StockManager(pido oorder.ido%type)<br /> IS<br /> declare<br /> etatstock integer;<br /> <br /> CURSOR curseur IS<br /> SELECT idol, quantity, stockquantity<br /> FROM orderline o,product p<br /> WHERE pido = o.ido and o.idproduct=p.idproduct ;<br /> <br /> ligne_order curseur%ROWTYPE;<br /> <br /> BEGIN<br /> etatstock:=1;<br /> OPEN curseur;<br /> FETCH curseur INTO ligne_order;<br /> <br /> <br /> WHILE curseur%FOUND<br /> LOOP<br /> IF (line_order.quantity> line_order.stockquantity) THEN<br /> etatstock:=0;<br /> end if;<br /> FETCH curseur INTO ligne_order;<br /> end loop;<br /> <br /> <br /> if (etatstock =1)<br /> then<br /> update oorder set orderstate= T where pido= oorder.ido;<br /> else<br /> prompt reapro;<br /> end if;<br /> <br /> END;
A
CREATE OR REPLACE PROCEDURE StockManager(ido order.ido%type)<br /> IS<br /> declare<br /> etatstock integer;<br /> CURSOR curseur IS <br /> SELECT idol, quantity, stockquantity <br /> FROM orderline o,product p<br /> WHERE ido = o.ido and o.idproduct=p.idproduct ;<br /> ligne_order curseur%ROWTYPE;<br /> <br /> BEGIN<br /> etatstock:=1;<br /> OPEN curseur;<br /> FETCH curseur INTO ligne_order;<br /> <br /> WHILE curseur%FOUND<br /> LOOP<br /> <br /> IF (line_order.quantity> line_order.stockquantity) THEN<br /> etatstock:=0;<br /> end if;<br /> FETCH curseur INTO ligne_order;<br /> endloop <br /> <br /> <br /> if (etatstock =1)<br /> then<br /> update order set orderstate= T where ido= order.ido;<br /> else<br /> reapro;<br /> end if;<br /> END;
Publicité
Publicité