الانتقال إلى المحتوى
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

بتاريخ:

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

post-38327-1245737527_thumb.jpg

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

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

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

بتاريخ:

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

بتاريخ:
  • كاتب الموضوع

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

بتاريخ:

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


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

أخ عبد الله .. كيف أحوالك
اختفيت ولا كيف ......... طمنا عنك ؟

بتاريخ:

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

بتاريخ:
  • كاتب الموضوع

ولا يهمك أخ عبد الله بالتوفيق يا رب والله يعطيك العافية وسلامي لإلك

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

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

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

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

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

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.