بتاريخ: 29 مارس 201412 سنة comment_248554 قمت بعمل pre insert trigger على البلوك الاساسي وذلك للقيام بالعد اوتوماتيكيا واريد ان يبدا cursor from 1 at the begening of the year ,واضافة السنة اليه على شكل yyyy ارجو المساعدة واعطائي الحل الصحيح الكود الذي كتبته على الشكل التالي : declare cursor test1 is select 'error' from table1 where id_test = (select max(id_test) from table1); x varchar2(5); y number; z number; begin open test1; fetch test1 into x; select to_number(to_char(sysdate,'yyyy')) into y from dual; select max(to_number(to_char(test_date,'yyyy'))) into z from table1; if (not test1%found) then if y > z then :table1.id_test :=1; else select max(id_test||z) +1 into :id_test from table1 where to_number(to_char(sysdate,'yyyy')) = z; end if; end if; close test1 end; تقديم بلاغ
بتاريخ: 29 مارس 201412 سنة comment_248557 السلام عليكم BEGIN SELECT NVL (MAX (id_test), 0) + 1 || TO_NUMBER (TO_CHAR (SYSDATE, 'yyyy')) INTO :blk_1.id_test FROM table1 WHERE YEAR = TO_NUMBER (TO_CHAR (SYSDATE, 'yyyy')); EXCEPTION WHEN NO_DATA_FOUND THEN :blk_1.id_test := 1; END; تقديم بلاغ
بتاريخ: 3 أبريل 201412 سنة كاتب الموضوع comment_248777 لقد قمت باضافة الكود ولكن المشكلة ان الرقم اصبح يتضاعف بشكل كبير وليس 12014 . 22014 ............... مثلا تقديم بلاغ
بتاريخ: 3 أبريل 201412 سنة comment_248783 الكود السابق سيبدأ التسلسل معك كالتالي: 12014 22014 32014 وهكذا... تقديم بلاغ
بتاريخ: 4 أبريل 201412 سنة كاتب الموضوع comment_248803 شكرا على الرد لقد قمت بكتابة الكود ولكن المشكلة في YEAR لذا اضطررت الى كتابتها بشكل اخر والكود على الشكل التالي declare begin SELECT NVL (MAX (id_test), 0) + 1|| TO_NUMBER(TO_CHAR(SYSDATE, 'yyyy')) INTO :TABLE1.id_test FROM tABLE1 WHERE TO_NUMBER(TO_CHAR(tABLE1.Test_dATe, 'yyyy')) = TO_NUMBER(TO_CHAR (SYSDATE, 'yyyy'));---- THE WORD YEAR WAS ENCOUYTERED A BAD VARIABLE EXCEPTION WHEN NO_DATA_FOUND THEN :id_test := 1 END; تقديم بلاغ
انضم إلى المناقشة
يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.