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

  • تسجيل الدخول عبر الفيس بوك تسجيل الدخول عبر تويتر Log In with LinkedIn Log In with Google      تسجيل دخول    
  • إنشاء حساب

صورة
- - - - -

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


25 رد (ردود) على هذا الموضوع

#1 Ricardo Quaresma

Ricardo Quaresma

    عضو

  • الأعضــاء
  • 19 مشاركة

تاريخ المشاركة 23 June 2009 - 09:15 AM

أخ مصطفى وضعت الأسئلة من أكثر من أسبوعين وأكثر من مرة وبدون حل شو المشكلة عندي فحص بعد كم يوم

ملفات مرفقة

  • ملف مرفق  PL_Q.jpg   162.28كيلو   121 عدد مرات التحميل

  • فيصل الخليدي معجب بهذا

#2 mustafagamiel

mustafagamiel

    مشرف قسم النماذج والمشاريع

  • فريق الإشراف
  • 2,095 مشاركة
  • البـلـد: Country Flag

تاريخ المشاركة 23 June 2009 - 10:04 AM

السلام عليكم
أخي الكريم
اتمنى من الجميع المشاركة في الحل وجاري العمل فيه
ويامسهل

اللهم إن كان رزقي في الســــــــــماء فأنزله
وإن كان في الأرض فأخرجـه
وإن كان بعيدا فقربه وإن كان قريبا فيسره
وإن كان قليلا فكثره وإن كان كثيرا فبارك لي فيه

اللـــهم آمين
لا إله إلا الله وحده لاشريك له- له الملك وله الحمد وهو على كل شيء قدير
لا إله إلا أنت سبحانك-- إني كنت من الظالمين






#3 Ricardo Quaresma

Ricardo Quaresma

    عضو

  • الأعضــاء
  • 19 مشاركة

تاريخ المشاركة 23 June 2009 - 10:19 AM

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



#4 mustafagamiel

mustafagamiel

    مشرف قسم النماذج والمشاريع

  • فريق الإشراف
  • 2,095 مشاركة
  • البـلـد: Country Flag

تاريخ المشاركة 24 June 2009 - 05:14 PM

السلام عليكم
أخي الكريم
ده حلين للسؤال الاول والثاني طبعا انت هتعرف تعمل الجداول
والحلين دول مش انا الاي عملهم الاي عملهم أخي الفاضل عبد الله فرغلي 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;
/



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

اللهم إن كان رزقي في الســــــــــماء فأنزله
وإن كان في الأرض فأخرجـه
وإن كان بعيدا فقربه وإن كان قريبا فيسره
وإن كان قليلا فكثره وإن كان كثيرا فبارك لي فيه

اللـــهم آمين
لا إله إلا الله وحده لاشريك له- له الملك وله الحمد وهو على كل شيء قدير
لا إله إلا أنت سبحانك-- إني كنت من الظالمين






#5 Ricardo Quaresma

Ricardo Quaresma

    عضو

  • الأعضــاء
  • 19 مشاركة

تاريخ المشاركة 24 June 2009 - 05:34 PM

الله يجزيك الخير أخي مصطفى انت والأخ عبد الله وان شاء الله بنكافيكم بالأفراح

#6 hanyfreedom

hanyfreedom

    مشرف سابق وعضو مميز

  • المجموعة الماسية
  • 1,481 مشاركة
  • البـلـد: Country Flag
  • الاهتمامات:Chess , Sudoku

تاريخ المشاركة 24 June 2009 - 05:36 PM

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

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

و بالتوفيق

#7 abdu1_far

abdu1_far

    عضو نشط

  • الأعضــاء
  • 430 مشاركة
  • البـلـد: Country Flag

تاريخ المشاركة 25 June 2009 - 09:51 AM

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

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

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

تم التعديل بواسطة abdu1_far, 25 June 2009 - 09:54 AM.

قال رسول الله صلى الله عليه وسلم "إن لله عز وجل عباداً أختصهم بقضاء حوائج الناس ، حببهم إلي الخير وحبب الخير إليهم
هم الاّمنون من عذاب الله يوم القيامة " أوكما قال صلى الله عليه وسلم

#8 mustafagamiel

mustafagamiel

    مشرف قسم النماذج والمشاريع

  • فريق الإشراف
  • 2,095 مشاركة
  • البـلـد: Country Flag

تاريخ المشاركة 25 June 2009 - 11:38 AM

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

اللهم إن كان رزقي في الســــــــــماء فأنزله
وإن كان في الأرض فأخرجـه
وإن كان بعيدا فقربه وإن كان قريبا فيسره
وإن كان قليلا فكثره وإن كان كثيرا فبارك لي فيه

اللـــهم آمين
لا إله إلا الله وحده لاشريك له- له الملك وله الحمد وهو على كل شيء قدير
لا إله إلا أنت سبحانك-- إني كنت من الظالمين






#9 abdu1_far

abdu1_far

    عضو نشط

  • الأعضــاء
  • 430 مشاركة
  • البـلـد: Country Flag

تاريخ المشاركة 25 June 2009 - 12:43 PM

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

#10 abdu1_far

abdu1_far

    عضو نشط

  • الأعضــاء
  • 430 مشاركة
  • البـلـد: Country Flag

تاريخ المشاركة 25 June 2009 - 01:26 PM

الاخ 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 ، لكن التيرجر ذات نفسه مفهوش مشكلة بإذن الله
تقبل تحياتي
قال رسول الله صلى الله عليه وسلم "إن لله عز وجل عباداً أختصهم بقضاء حوائج الناس ، حببهم إلي الخير وحبب الخير إليهم
هم الاّمنون من عذاب الله يوم القيامة " أوكما قال صلى الله عليه وسلم

#11 Ricardo Quaresma

Ricardo Quaresma

    عضو

  • الأعضــاء
  • 19 مشاركة

تاريخ المشاركة 25 June 2009 - 04:50 PM

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

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

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





#12 Ricardo Quaresma

Ricardo Quaresma

    عضو

  • الأعضــاء
  • 19 مشاركة

تاريخ المشاركة 25 June 2009 - 06:21 PM

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


- أنشئ 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;

#13 Ricardo Quaresma

Ricardo Quaresma

    عضو

  • الأعضــاء
  • 19 مشاركة

تاريخ المشاركة 25 June 2009 - 06:23 PM

الأخ عبد الله المحترم .. السلام عليكم .
في المثال السابق مفهوم الجدول البرمجي .

#14 Ricardo Quaresma

Ricardo Quaresma

    عضو

  • الأعضــاء
  • 19 مشاركة

تاريخ المشاركة 25 June 2009 - 06:39 PM

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;



#15 mustafagamiel

mustafagamiel

    مشرف قسم النماذج والمشاريع

  • فريق الإشراف
  • 2,095 مشاركة
  • البـلـد: Country Flag

تاريخ المشاركة 26 June 2009 - 01:34 PM

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

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

اللهم إن كان رزقي في الســــــــــماء فأنزله
وإن كان في الأرض فأخرجـه
وإن كان بعيدا فقربه وإن كان قريبا فيسره
وإن كان قليلا فكثره وإن كان كثيرا فبارك لي فيه

اللـــهم آمين
لا إله إلا الله وحده لاشريك له- له الملك وله الحمد وهو على كل شيء قدير
لا إله إلا أنت سبحانك-- إني كنت من الظالمين