Advertisement
Guest User

Untitled

a guest
Nov 12th, 2017
190
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PL/SQL 3.03 KB | None | 0 0
  1. CREATE OR REPLACE PROCEDURE bestellen (anr VARCHAR2, bmenge NUMBER) AS
  2.  
  3. PROCEDURE ermittle_einzelteile( anr  VARCHAR2, emenge NUMBER) ; --Prototyp
  4. PROCEDURE p_privatenachbestellung( anr  VARCHAR2, msg VARCHAR2) ; --Prototyp
  5. PROCEDURE p_nbmenge_zulageradden; --Prototyp
  6.  
  7.  
  8. PROCEDURE ermittle_einzelteile( anr VARCHAR2, emenge NUMBER) AS  
  9. CURSOR c1 IS SELECT * FROM struktur WHERE o_a_nr = anr;
  10. c1_rec c1%ROWTYPE;
  11. Flag NUMBER:=0;
  12. menge_neu NUMBER :=0;
  13. curSeq NUMBER :=0; /*sowie id.*/
  14. lm NUMBER:=0;
  15.  
  16. BEGIN
  17.     Flag := 0;
  18.     FOR c1_rec IN C1 LOOP
  19.         Flag := 1;
  20.           menge_neu := emenge*c1_rec.menge;
  21.         Ermittle_einzelteile(c1_rec.u_a_nr, menge_neu);
  22.     END LOOP;
  23.     IF Flag = 0 THEN  
  24.     BEGIN
  25.       curSeq  := ETAUFTRAGSEQUENCE.CURRVAL;
  26.       INSERT INTO et_liste VALUES(curSeq, anr, emenge);
  27.       SELECT lager.lagermenge  INTO lm FROM lager WHERE a_nr = anr;
  28.       UPDATE lager SET lagermenge = lagermenge-emenge WHERE a_nr = anr;
  29.       EXCEPTION WHEN OTHERS THEN
  30.         IF SQLCODE = -20222 THEN  /*genug im lager und existiert*/
  31.           p_privatenachbestellung(anr, SUBSTR(SQLERRM, 1, 65));        
  32.         ELSE
  33.            IF SQLCODE = -20111 THEN
  34.             raise_application_error(-20000,'nachbs. nit mögl. lager von:' || anr || ' ist ' || lm || 'aber neue menge is größer' || emenge);
  35.            ELSE
  36.             DBMS_OUTPUT.PUT_LINE('bin in excepion when others then' || SQLCODE);
  37.             UPDATE et_liste SET et_menge = et_menge + emenge WHERE et_nr = anr AND pa_nr = curSeq;
  38.             UPDATE lager SET lagermenge = lagermenge-emenge WHERE a_nr = anr;      
  39.            END IF;
  40.        END IF;            
  41.    END;
  42.     END IF;
  43. END;
  44.  
  45. PROCEDURE p_privatenachbestellung(anr VARCHAR2, msg VARCHAR2) AS
  46. BEGIN
  47.   /*ROLLBACK; *//*allle gespeichertden et daten weerden zrckgestellt, weil pauftrag nicht valide is(zu gringe menge)*/
  48.   BEGIN  
  49.     DBMS_OUTPUT.PUT_LINE(msg);
  50.     INSERT INTO nachbestellen VALUES(anr);
  51.     DBMS_OUTPUT.PUT_LINE(anr || ' nachbestellt');
  52.     EXCEPTION WHEN OTHERS THEN
  53.       DBMS_OUTPUT.PUT_LINE('Artikel ' || anr || ' wurde bereits nachbestellt');
  54.     END;
  55.     COMMIT;
  56. END;
  57.  
  58. /*wird nachdem man in nachbestelltabelle eingefügt hat aufgerufen*/
  59. PROCEDURE p_nbmenge_zulageradden AS
  60. CURSOR cl IS SELECT a_nr FROM nachbestellen;
  61. cl_rec cl%ROWTYPE;
  62. menge NUMBER := 0;
  63. BEGIN
  64.   FOR cl_rec IN Cl LOOP
  65.     BEGIN
  66.       INSERT INTO lager VALUES(cl_rec.a_nr, 10, 5, 10, NULL);
  67.       EXCEPTION WHEN OTHERS THEN
  68.         UPDATE lager SET lagermenge = lagermenge + nachbestellmenge WHERE a_nr = cl_rec.a_nr;
  69.     END;
  70.   END LOOP;
  71. END;
  72.  
  73.  
  74. BEGIN
  75.   INSERT INTO produktionsauftrag VALUES(ETAUFTRAGSEQUENCE.NEXTVAL, anr, bmenge);
  76.     Ermittle_einzelteile(anr,bmenge);
  77.  
  78.   p_nbmenge_zulageradden();
  79.   DELETE FROM nachbestellen;/*nachbestellen daten für den derzeitgen auftrag löschen, weil ja lager upgedated wird*/
  80.  
  81.   DBMS_OUTPUT.PUT_LINE('Success Produktionsauftrag ist geschafft');
  82.     COMMIT;
  83. EXCEPTION
  84.     WHEN OTHERS THEN
  85.     DBMS_OUTPUT.PUT_LINE('pauftrag failed. error:' || SUBSTR(SQLERRM, 1, 65));
  86.         ROLLBACK;
  87. END;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement