الانتقال إلى المحتوى

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


Ricardo Quaresma

Recommended Posts

  • الردود 25
  • البداية
  • اخر رد

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

  • Ricardo Quaresma

    12

  • abdu1_far

    9

  • mustafagamiel

    4

  • hanyfreedom

    1

خير ان شاء الله أنا مو مشان شي أخي الكريم ومو الوحيد اللي عم انتظر الحل كتير طلاب فيا ريت تتكرمو علينا بالحل لإنو قرب موعد الفحص

رابط هذا التعليق
شارك

السلام عليكم
أخي الكريم
ده حلين للسؤال الاول والثاني طبعا انت هتعرف تعمل الجداول
والحلين دول مش انا الاي عملهم الاي عملهم أخي الفاضل عبد الله فرغلي abdo_far1


السؤال الاول 
===========


CREATE USER USER_TEST IDENTIFIED BY USER_TEST;

GRANT CREATE ANY TRIGGER TO USER_TEST;

GRANT "CONNECT" TO USER_TEST;

GRANT CREATE ANY TABLE TO USER_TEST;

GRANT INSERT ON PRDCTS TO USER_TEST;

GRANT UPDATE(PRODNAME,QUANTITY) ON PRDCTS TO USER_TEST;

==============================================


السؤال الثاني :
==========

CREATE OR REPLACE TRIGGER QUNT_TRIGGER
BEFORE INSERT OR UPDATE
OF QNTITY ON INVDTLS 
REFERENCING NEW AS NEW OLD AS OLD
FOR EACH ROW
DECLARE
V_STATE VARCHAR2(10);
V_SAFELVL NUMBER ; 
V_QUT NUMBER;
BEGIN IF INSERTING 
THEN 
SELECT I.STATE 
INTO V_STATE FROM INVOICES I
WHERE I.INVID = :NEW.INVID ; 

IF V_STATE ='IN' 
THEN
UPDATE PRDCTS
SET QUANTITY =PRDCTS.QUANTITY+:NEW.QNTITY
WHERE PRDID = :NEW.PRDID;

ELSIF V_STATE ='OUT'
THEN 
SELECT P.SAFELVL ,P.QUANTITY
INTO V_SAFELVL ,V_QUT
FROM PRDCTS P
WHERE P.PRDID=:NEW.PRDID;

IF V_SAFELVL<=(V_QUT-:NEW.QNTITY) 
THEN 

BEGIN UPDATE PRDCTS
SET PRDCTS.QUANTITY =(PRDCTS.QUANTITY-:NEW.QNTITY)
WHERE PRDCTS.PRDID = :NEW.PRDID; 
END; 

ELSE
RAISE_APPLICATION_ERROR(-20987,'THERE CAN BE INSERT RECORD ,THE SAVE LEVEL OF THIS PRODUCT = '||V_SAFELVL ); 

END IF ; 
END IF ;

ELSIF UPDATING 
THEN 
UPDATE PRDCTS
SET PRDCTS.QUANTITY =PRDCTS.QUANTITY+(:OLD.QNTITY-:NEW.QNTITY)
WHERE PRDCTS.PRDID = :NEW.PRDID; 
END IF ;



END QUNT_TRIGGER;
/




وجاري حل الباقي
وياريت حد يشاركنا الحل
مرة أخرى أشكر أخي عبدالله فرغلي

رابط هذا التعليق
شارك

أخى الكريم \ Ricardo Quaresma

أرفق حلولك لهذا الأمتحان ، و نحن سنصلح لك أخطائك البرمجية.

و بالتوفيق

رابط هذا التعليق
شارك

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

اخيرأ :
====
انا بأه عندي مشكلة مع الامتحان ، انا فيه معاني مش فاهمها لاني مش بتعاملل بالعربي في البرمجة ، فحاولت اربط المعنى باي حاجة عارفها في ارواكل
يعني مثلاً أعطى صلاحية للمستخدم إنشاء برامج ... انا مش فاهم المقصود بيها جداول ولا PROGRAM UNIT (فانكشن - بروسجر-بكتج ) ولا ايه بالظبط ، يعني الجواب حسب النية بأه فلو انت عارف معنى كلمة برامج ده الكود بتاعها تغير بدل TABLE تحط معنى كلمة برامج بالنسبة لك
ده الكود GRANT CREATE ANY TABLE TO USER_TEST

في الاخر اتشرف واعتز بصداقتك ... تقبل تحياتي واسف على الاطالة

تم تعديل بواسطة abdu1_far
رابط هذا التعليق
شارك

السلام عليكم
شكرا لك أخي عبدالله
على هذه الكلمات الجميلة النابعة من القلب وأكيد إن شاء الله ستصل إلى القلب بدون فهم خاطيء
وأن معك في كل ماقلته شكرا لك مرة أخرى

رابط هذا التعليق
شارك

العفو يا اخ مصطفى
المهم بأه لو الاخ السائل او اي اخ من اخونا اللي قرءوا الامتحان ، يفسروا لنا بعض الكلمات
يعني ايه جدول برمجي ، يعني ايه تابع ( تقريبا فانكشن) ، يعني ايه سماحية انشاء برامج !!!! إيه المقابل لهم عندنا في اوراكل
هل من مجيب .... اطال الله عمركم وبارك فيه
ولنا عودة

رابط هذا التعليق
شارك

الاخ Ricardo Quaresma

لحين ما حد يترجم معاني الكلمات اللي انا ذكرتها
ده حل السؤال الرابع -3

CREATE OR REPLACE 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;



السؤال التالت ... حاولت افتكر الSYNTEX بتاع TEXT.IO مقدرتش افتكر جاري البحث عن الالSYNTEX ، لكن التيرجر ذات نفسه مفهوش مشكلة بإذن الله
تقبل تحياتي

رابط هذا التعليق
شارك

الأخ عبد الله المحترم .. السلام عليكم .


آسف عالتأخير وسامحني .. بالنسبة للكلام اللي قلتو فكلامك صحيح 100 % والله يجزيك الخير بالنسبة للأسئلة فالمشكلة انو نحنا طلاب حمله وتغيرت كثير من الأمور علينا وأضافو على المنهاج أمور أول مرة بناخذها لهيك واجهنا صعوبة بحل الأسئلة والحلول الموجودة بصراحة مضحكة .. وأنا ومعظم الطلاب الحمله خارج سوريا وبنشتغل
وبتعرف الغربة شلون ولو النا تواصل مع أحد الطلاب المستجدين لكانت الأمور أسهل .. بس فكرت انو وضع الأسئلة هون لربما تكون الطريقة الأسرع خصوصي انو عنا أكثر من مادة .. وانو أخد الأخوة المخضرمين بالأوراكل ما رح يواجه صعوبة بحل الاسئلة .

بالنسبة للمصطلحات أخد عبد الله فهي كالتالي :
تابع ------- Function .
جدول برمجي ------- Table .
سماحية انشاء برامج ------ هي سماحية انشاء Object .

ومرة أخرى آسف عالتأخير أخ عبد الله والله يكافئك على تعبك معنا .



رابط هذا التعليق
شارك

العفو يا اخ مصطفى
المهم بأه لو الاخ السائل او اي اخ من اخونا اللي قرءوا الامتحان ، يفسروا لنا بعض الكلمات
يعني ايه جدول برمجي ، يعني ايه تابع ( تقريبا فانكشن) ، يعني ايه سماحية انشاء برامج !!!! إيه المقابل لهم عندنا في اوراكل
هل من مجيب .... اطال الله عمركم وبارك فيه
ولنا عودة


- أنشئ Table: يحوي رقم الموظف/الإسم/اسم المدير/المعاش .


- إجرائية لتخزين القيم من Emp في الجدول السابق
- إجرائية يمرر لها رقم الموظف و ترد سجل من الجدول السابق لهذا الموظف و ترفع Exception إذا لم يكن الرقم موجود .
- إجرائية لتخزين سجل جديد في الجدول السابق (في أخر سجل) يمرر لها رقم الموظف \ الاسم \ المعاش .
- إجرائية يمرر لها أسم الجدول , ويمرر لها clause :الخاصة where حسب ما يريد المستخدم وتطبع سجلات الجدول .

-----------------------------------------------------------------------------------------


CREATE OR REPLACE PACKAGE PACKsql IS
TYPE empRow IS RECORD(emp_id NUMBER, emp_name VARCHAR(20), emp_mgr NUMBER, emp_sal NUMBER); PROCEDURE readEmps;
FUNCTION getEmp(empID NUMBER) RETURN empRow;
PROCEDURE addEmp(empID NUMBER, empName VARCHAR, empSal NUMBER);

PROCEDURE printTab(tabName VARCHAR2, whereClause VARCHAR2);
END PACKsql;
/
sho err


CREATE OR REPLACE PACKAGE BODY PACKsql IS
TYPE empTab IS TABLE OF empRow INDEX BY BINARY_INTEGER;
theEmpTab empTab;

PROCEDURE readEmps IS
CURSOR empWalker IS SELECT * FROM emp;
empTabRec empRow;
BEGIN
FOR empRec IN empWalker LOOP

empTabRec.emp_id:=empRec.empNo;
empTabRec.emp_name:=empRec.ename;
empTabRec.emp_mgr:=empRec.mgr;
empTabRec.emp_sal:=empRec.sal;

theEmpTab(empRec.empNo):=empTabRec;
END LOOP;
END readEmps;

FUNCTION getEmp(empID NUMBER) RETURN empRow IS
BEGIN
RETURN theEmpTab(empID);
END getEmp;

PROCEDURE addEmp(empID NUMBER, empName VARCHAR, empSal NUMBER) IS
empTabRec empRow;
BEGIN
empTabRec.emp_id:=empID;
empTabRec.emp_name:=empName;
empTabRec.emp_sal:=empSal;

theEmpTab(empID):=empTabRec;

END addEmp;

PROCEDURE printTab(tabName VARCHAR2, whereClause VARCHAR2) IS
cursorHandle INTEGER;
selectStr VARCHAR2(100);
c NUMBER;
BEGIN
cursorHandle:=dbms_sql.open_cursor;
selectStr:='SELECT * FROM ' || tabName || ' WHERE ' || whereClause;
dbms_sql.parse(cursorHandle, selectStr, dbms_sql.native);
c:=dbms_sql.excute(cursorHandle);

LOOP

END LOOP;
END printTab;
END PACKsql;

رابط هذا التعليق
شارك

Sorry for Mistake :


CREATE OR REPLACE PACKAGE PACKsql IS
TYPE empRow IS RECORD(emp_id NUMBER, emp_name VARCHAR(20), emp_mgr NUMBER, emp_sal NUMBER);
PROCEDURE readEmps;
FUNCTION getEmp(empID NUMBER) RETURN empRow;
PROCEDURE addEmp(empID NUMBER, empName VARCHAR, empSal NUMBER);

PROCEDURE printTab(tabName VARCHAR2, whereClause VARCHAR2);
END PACKsql;
/
sho err


CREATE OR REPLACE PACKAGE BODY PACKsql IS
TYPE empTab IS TABLE OF empRow INDEX BY BINARY_INTEGER;
theEmpTab empTab;

PROCEDURE readEmps IS
CURSOR empWalker IS SELECT * FROM emp;
empTabRec empRow;
BEGIN
FOR empRec IN empWalker LOOP

empTabRec.emp_id:=empRec.empNo;
empTabRec.emp_name:=empRec.ename;
empTabRec.emp_mgr:=empRec.mgr;
empTabRec.emp_sal:=empRec.sal;

theEmpTab(empRec.empNo):=empTabRec;
END LOOP;
END readEmps;

FUNCTION getEmp(empID NUMBER) RETURN empRow IS
BEGIN
RETURN theEmpTab(empID);
END getEmp;

PROCEDURE addEmp(empID NUMBER, empName VARCHAR, empSal NUMBER) IS
empTabRec empRow;
BEGIN
empTabRec.emp_id:=empID;
empTabRec.emp_name:=empName;
empTabRec.emp_sal:=empSal;

theEmpTab(empID):=empTabRec;

END addEmp;

PROCEDURE printTab(tabName VARCHAR2, whereClause VARCHAR2) IS
cursorHandle INTEGER;
selectStr VARCHAR2(100);
c NUMBER;
BEGIN
cursorHandle:=dbms_sql.open_cursor;
selectStr:='SELECT * FROM ' || tabName || ' WHERE ' || whereClause;
dbms_sql.parse(cursorHandle, selectStr, dbms_sql.native);
c:=dbms_sql.excute(cursorHandle);

LOOP

END LOOP;
END printTab;
END PACKsql;

رابط هذا التعليق
شارك

السلام عليكم ورحمة الله وبركاته
أتوجه بالشكر لاخي عبدالله
بالنسبة للسؤال الثالث
هل معناه ان يتم انشاء التريجر على نفس المستخدم لتسجيل اي عملة grant لاي مستخدم اخر على ال object التي يمتلككها
أم لتسجيل أي عملية grant على مستوى الداتا بيز ككل

عموما طالما الشغل على السيرفر سنسخدم ال package UTL_FILE للقيام بذلك

رابط هذا التعليق
شارك

معذرة على عدم المشاركة والتفاعل اليومين اللي فاتوا
بس حقيقة انا باخد اجازة من اوراكل جمعة وسبت بقاللي حوالي سنتين بعمل كده ، وبزعل جدا حتى لما يكون عندي اضافي يوم الجمعة او السبت
ما علينا
اولا : جزاكم الله خيرا يا اخي مصطفى
ثانيا :الاخ Ricardo Quaresma
- ميه ميه التفاعل ومحاولة الحل ، كده نقول ان الموضوع اتى بثماره انه مش مجرد حل اسئلة وخلاص ، لا ده تفاعل ومشاركة ومناقشة وهكذا
- شكرأ... لايضاح الكلمات ، بس هم لازم يعقدوا الامتحان كده من الاول ، ما يكتبوا جدول ، وفانكش ، وكده يعني من الاول :unsure:
- سؤال بأه الحل اللي انت كاتبه ده ... انت عايزنا نبص عليه ، ولا انت بتشارك بالحل الصحيح عشان الناس كلها تستفاد ، على العموم جاري القراءة ...ولنا عودة ان شاء الله

رابط هذا التعليق
شارك

اخي لا افهم معنى اللوب الموجود في البروسجر printTab ايه فايدته ؟؟؟
تاني حاجة انت ليه عامل البروسجر printTab بـ dbms_sql.excute ، ليه مش كيرسور عادي او جملة سلكتايه مباشرة ؟؟

انا بس ده ملاحظتى حتى الان ,,, لسه في مرحلة قرأة البكتج ولنا عودة ان شاء الله

رابط هذا التعليق
شارك

الأخ عبد الله المحترم .. السلام عليكم .


بالنسبة للـ Procedure Print Tab فهاد السؤال سؤال دورة وكان مطلوب الحل بهذه الطريقة
بإمكانك استخدام الطريقة التي تفضلها أخ عبد الله .
بس نحنا الدكاترة عنا دائما بحبو يستخدمو الأسلوب الصعب .
المشكلة انو الإعطاء شبه عادي والأسئلة متل مو شايف والوقت طبعا غير كافي لحل الأسئلة .

أنا آسف لإني تأخرت بالرد بس ما انتبهت للردود غير اليوم والله .
وشكرا كتير عتعاونك أخ عبد الله .
سلامي لك .


رابط هذا التعليق
شارك

افهم من المثال بتاع حضرتك ان جدول برمجي مقصود بيه TABLE OF ROW
مش physical table ??
اوك ..... هبدأ عمل البكتج حالا ، معلش لاني كنت مشغول شوية
الله المستعان

رابط هذا التعليق
شارك

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

رابط هذا التعليق
شارك

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


السلام عليكم أخ عبد الله ..
بالنسبة للسؤال الرابع أول فقرة فهوة بيقصد بروسيجر بباراميتر متل ما تفضلت حضرتك ..
بالنسبة للأسئلة فخود راحتك والله يعطيك العافية حليت جزء مهم بالنسبة لإلنا
سلامي الك أخي عبد الله .
رابط هذا التعليق
شارك

افهم من المثال بتاع حضرتك ان جدول برمجي مقصود بيه TABLE OF ROW
مش physical table ??
اوك ..... هبدأ عمل البكتج حالا ، معلش لاني كنت مشغول شوية
الله المستعان


بالنسبة للـجدول البرمجي فمتل ما تفضلت حضرتك " بس بتعرف المصطلحات العربية " .
تعبناك معانا .. الله يجزيك الخير عنا أجمعين .
سلام أخ عبد الله .
رابط هذا التعليق
شارك

الحمد لله كويس ... لا مختفتش ولا حاجة
بس انشغلت .. انت عارف ظروف الشغل مش بأيدك
انا بحاول يدوبك اخش على المنتدى لو فيه حاجة في السريع واقدر ارد برد
بس ان شاء الله احاول اخلص لك الامتحان ، او حد من الاخوة يدوش معانا ويساعد
كنت اتمنى اكون فاضي عن كده عشان انجز لك الامتحان ، ولكن قدر الله وماشاء فعل
ادعلنا انت بس والله المستعان

رابط هذا التعليق
شارك

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

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

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

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   تمت استعادة المحتوى السابق الخاص بك.   مسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

جاري التحميل



×
×
  • أضف...

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

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