abdu1_far بتاريخ: 9 يوليو 2009 تقديم بلاغ مشاركة بتاريخ: 9 يوليو 2009 (معدل) أولاً : انا بأعتذر عن التأخير ، بس صدقاً ظروف الشغل بأه ثانياً : انا كنت جاي النهارده وعارف ان الشغل خفيف وواخد قرار اني اخلص الامتحان ، بس واضح كده ان الدنيا بدأت تزنق تاني في الشغل ، انا كنت ناوي اخلص السؤال الثالث والرابع وابعتهم ، لكن فعلا لاني حاسس اني مش متحكم في وقتي وكمان مش عارف هكون فاضي باقي اليوم ولا لأ ، انا خلصت السؤال الرابع كله وقولت ابعتهولك عشان ما تتعطلش اكتر من كده ، ولو ربنا قدرني وكان فيه وقت ولحقت اخلص الثالث النهارده هبعته ده البكتج المطلوبة .... بس ياريت تتأكد منها ، انا جربتها كلها والحمد لله تمام ، بس برضه اتأكد 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; / تم تعديل 9 يوليو 2009 بواسطة abdu1_far اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
Recommended Posts
انضم إلى المناقشة
يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.