بتاريخ: 11 أبريل 201312 سنة comment_234891 السلام عليكم اخواني في هذا المنتدى ارجو المساعدة في انجاز عملي فقد كونت بروسيجر لكنه لم يكتمل طبعا انا عندي جدول لسمه ماستر فاريد عمل بروسيجر يحدث على هذا الجدول وبالتحديد الclass_code SQL> desc master; C?C?? IC??? C???? ----------------------------------------- -------- ------------- ID NOT NULL NUMBER(6) F_NAME NOT NULL VARCHAR2(12) S_NAME NOT NULL VARCHAR2(12) T_NAME NOT NULL VARCHAR2(12) L_NAME VARCHAR2(12) NATIONAL_NO NUMBER(12) ENLIST_DATE DATE CLASS_CODE NUMBER(2) ADDRESS_CODE NUMBER(2) JOB_GRADE_CODE NUMBER(2) DEPARTMENT_CODE NUMBER(2) VAC_ID NUMBER(6) ALLOWANC_ID NUMBER EDUCATION_CODE NUMBER(2) MISTAKES_ID NUMBER اما البروسيجر create or replace procedure suzan (id_emp in number) as id_emp number; cursor c1 is select id from master where id=id_emp; begin open c1 loop fetch c1 into id_emp; exist when c1%notfound; end loop; close c1; if select months_between (sysdate,(select enlist_date from master where id=id_emp))/12 from dual >5 then update master set master.class_code=9 end if; end suzan; / فيا اخواني اللي يعرف الخطأ لايبخل علي بالجواب وجزاكم الله خير تم تعديل 11 أبريل 201312 سنة بواسطة Ahmad.Hasan تقديم بلاغ
بتاريخ: 11 أبريل 201312 سنة comment_234899 السلام علكيم جرب هذا الكود: CREATE OR REPLACE PROCEDURE suzan (id_emp IN NUMBER) AS CURSOR c1 IS SELECT ID, enlist_date FROM MASTER WHERE ID = id_emp; BEGIN FOR rec IN c1 LOOP IF MONTHS_BETWEEN (SYSDATE, rec.enlist_date) / 12 > 5 THEN UPDATE MASTER SET MASTER.class_code = 9 WHERE ID = rec.ID; END IF; END LOOP; END suzan; / تقديم بلاغ
بتاريخ: 11 أبريل 201312 سنة comment_234903 الكود بتاعك : exist when ........ انت كاتبها غلط اكتب exit تقديم بلاغ
بتاريخ: 13 أبريل 201312 سنة comment_234962 Create or replace procedure suzan(id_emp in number) as cursor c1 is select enlist_date from master where id = id_emp; dt date; begin open c1; fetch c1 into dt; if c1%found and months_between(sysdate, dt) > 5; update master set class_code = 9 where id = id_emp; end if; close c1; end; أولاً لا تستطيع تعريف id_emp مرةً أخرى داخل ال code ثانياً لا داعٍ لل loop لأنه عادةً رقم الموظف id يكون unique لا يتكرر و لا يوجد موظفان يحملان الرقم نفسه، و لكن إن كان هناك أكثر من موظف يحمل نفس الرقم فقد كتبت لك ال code التالي يحوي ال loop. ثالثاً لا داعٍ للقسمة على 12 لأن عدد الأشهر بين تاريخ الجهاز و enlist_date سيكون دائماً بين 0 و 11 فالقسمة على 12 ستجعله أقل من 1 في جميع الأحوال هذا هو ال code مع loop Create or replace procedure suzan(id_emp in number) as cursor c1 is select enlist_date from master where id = id_emp; dt date; begin open c1; loop fetch c1 into dt; exit when c1%notfound; if months_between(sysdate, dt) > 5 then update master set class_code = 9 where id = id_emp; end if; end loop; close c1; end; تقديم بلاغ
انضم إلى المناقشة
يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.