الانتقال إلى المحتوى
View in the app

A better way to browse. Learn more.

مجموعة مستخدمي أوراكل العربية

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

مساعدة فى : Package and Triggers

Featured Replies

بتاريخ:

أولاً : انا بأعتذر عن التأخير ، بس صدقاً ظروف الشغل بأه
ثانياً : انا كنت جاي النهارده وعارف ان الشغل خفيف وواخد قرار اني اخلص الامتحان ، بس واضح كده ان الدنيا بدأت تزنق تاني في الشغل ، انا كنت ناوي اخلص السؤال الثالث والرابع وابعتهم ، لكن فعلا لاني حاسس اني مش متحكم في وقتي وكمان مش عارف هكون فاضي باقي اليوم ولا لأ ، انا خلصت السؤال الرابع كله وقولت ابعتهولك عشان ما تتعطلش اكتر من كده ، ولو ربنا قدرني وكان فيه وقت ولحقت اخلص الثالث النهارده هبعته
ده البكتج المطلوبة .... بس ياريت تتأكد منها ، انا جربتها كلها والحمد لله تمام ، بس برضه اتأكد

CREATE OR REPLACE PACKAGE sql_pkg
IS
  TYPE invdtls_rec IS RECORD (
     invid       invdtls.invid%TYPE,
     prdid       invdtls.prdid%TYPE,
     unitprice   invdtls.unitprice%TYPE,
     qntity      invdtls.qntity%TYPE,
     discntd     invdtls.discntd%TYPE
  );

  TYPE invdtls_tab IS TABLE OF invdtls_rec
     INDEX BY BINARY_INTEGER;

  PROCEDURE insert_invdtl_rec (p_rec invdtls_rec);

  PROCEDURE trans_data (p_invid invdtls.invid%TYPE);

  FUNCTION get_total_bill (p_invid NUMBER)
     RETURN NUMBER;

  PROCEDURE print_inv_inf;
END sql_pkg;
/



********************************************************************************
**********************************************

وده الBODY


CREATE OR REPLACE PACKAGE BODY sql_pkg
IS
  inv_tbl   invdtls_tab;

  PROCEDURE insert_invdtl_rec (p_rec invdtls_rec)
  IS
     v_rec   invdtls_rec;
  BEGIN v_rec.invid := p_rec.invid;
     v_rec.prdid := p_rec.prdid;
     v_rec.unitprice := p_rec.unitprice;
     v_rec.qntity := p_rec.qntity;
     v_rec.discntd := p_rec.discntd;
     inv_tbl (v_rec.invid) := v_rec;
  END insert_invdtl_rec;

--************************************************************
  PROCEDURE trans_data (p_invid invdtls.invid%TYPE)
  IS
  BEGIN IF inv_tbl.EXISTS (p_invid)
     THEN
        INSERT INTO invdtls VALUES (inv_tbl (p_invid).invid, inv_tbl (p_invid).prdid,
                     inv_tbl (p_invid).unitprice, inv_tbl (p_invid).qntity,
                     inv_tbl (p_invid).discntd);

        inv_tbl.DELETE (p_invid);
     ELSE
        DBMS_OUTPUT.put_line ('NO INVID MATCH YOUR ASSIGN PARAMETER');
     END IF;
  END trans_data;

--*******************************************************************
  FUNCTION get_total_bill (p_invid NUMBER)
     RETURN NUMBER
  IS
     v_total   NUMBER;
  BEGIN IF p_invid IS NULL
     THEN
        RETURN NULL;
     END IF;

     SELECT SUM (ID.unitprice * ID.qntity) - SUM (i.discntv + ID.discntd)
       INTO v_total FROM invdtls ID, invoices i
      WHERE ID.invid = i.invid AND i.invid = p_invid;

     RETURN (v_total);
  EXCEPTION
     WHEN NO_DATA_FOUND
     THEN
        RETURN NULL;
  END get_total_bill;

--**************************************************************
  PROCEDURE print_inv_inf
  IS
     CURSOR inv_cur
     IS
        SELECT i.invid, i.invdate, i.state
          FROM invoices i;

     CURSOR invdt_cur (v_invid invoices.invid%TYPE)
     IS
        SELECT p.prodname, (ID.qntity * ID.unitprice) quntity_price
          FROM invdtls ID, prdcts p
         WHERE ID.prdid = p.prdid AND ID.invid = v_invid;

     v_inv_price   NUMBER := 0;
     v_total       NUMBER := 0;
  BEGIN FOR n IN inv_cur
     LOOP
        DBMS_OUTPUT.put_line
                 ('........................................................');
        DBMS_OUTPUT.put_line (   'INVID: '
                              || n.invid
                              || '  INVDATE: '
                              || n.invdate
                              || '  INV STATE :  '
                              || n.state
                             );
        DBMS_OUTPUT.put_line
                 ('---------------------------------------------------------');

        FOR i IN invdt_cur (n.invid)
        LOOP
           v_inv_price := v_inv_price + i.quntity_price;
           DBMS_OUTPUT.put_line (   'PRODNAME: '
                                 || i.prodname
                                 || '  QUNTITY_PRICE: '
                                 || i.quntity_price
                                );
        END LOOP;

        DBMS_OUTPUT.put_line
                  ('........................................................');
        DBMS_OUTPUT.put_line (   ' TOTAL PRICE OF INVOICE NUMBER '
                              || n.invid
                              || ' = '
                              || v_inv_price
                             );

        IF n.state = 'IN'
        THEN
           v_total := v_total - v_inv_price;
        ELSE
           v_total := v_total + v_inv_price;
        END IF;

        v_inv_price := 0;
     END LOOP;

     DBMS_OUTPUT.put_line
                  ('........................................................');
     DBMS_OUTPUT.put_line (' TOTAL PRICE =  ' || v_total);
  END print_inv_inf;
END sql_pkg;
/

تم تعديل بواسطة abdu1_far

  • الردود 25
  • المشاهدات 4.3k
  • البداية
  • اخر رد

أكثر المشاركين في هذا الموضوع

الصور المنشورة

انضم إلى المناقشة

يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.

زائر
أضف رد على هذا الموضوع...

برجاء الإنتباه

بإستخدامك للموقع فأنت تتعهد بالموافقة على هذه البنود: سياسة الخصوصية

Account

Navigation

البحث

إعداد إشعارات المتصفح الفورية

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.