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