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

عمل تسلسل لحقل داخل FORM

Featured Replies

بتاريخ:

اريد طريقة انشاء رقم متسلسل لحق معين داخل  FORMS  تم تصميمة APEX  بمعنى عند الحفظ ياخذ اعلى رقم ويضيفة كما كان يحديث داخل  DEIV6I عن طريق 

AELECT MAX(ID) + 1

INTO       :ID 

FROM FUAL

هذه الطريقة كيف انشأها فى APEX

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

مفيش حد رد خالص ليه كده 

انا عرفت انه يمكن اعمل processing بس اوامرها ايه 

  • بعد 4 أسابيع...
بتاريخ:

مبدأيا, طريقة الـ max(id) لازم تضيف ليها nvl عشان هيطلع no_data_found لو الجدول لسة فاضي.

ثانيا: الطريقة دي غلط في الـ multi user environment.

بالنسبة لأبكس, تقدر تعمل Process وتكتب فيها 

If :Your_pk_item is null 
then 
select your_seq.nextval into :your_pk_item from dual;
end if;

نصيحة: ما تتعلمش بالطريقة دي, بالذات في الأداة دي. هتضيع عمرك ومش هتوصل لمستوى يحترم. 

شوف كتاب كويس أو كورس كويس وذاكر ومارس وطبق الي ذاكرته عشان توصل لمستوى كويس.

وفقك الله لما يحب ويرضى.

تم تعديل بواسطة eslam elbyaly

  • بعد 1 شهر...
بتاريخ:

السلام عليكم 

يمكن عمل  Computation على الأيتم اللي اسمه مثلا P1_ITEM1

وال point  هتكون After Submit

ال computation type هتكون SQL Query return single value

SELECT NVL(MAX(YOUR_COLUMN),0)+1
FROM YOUR_TABLE;

وتقدر تخلي Server Side condition ال Item is NULL واختار P1_ITEM1 

 

مثال بالصور

image.thumb.png.855574aa7a6c6a1747903f77a45c5010.png

 

بتاريخ:

الطريقة دي غلط لإنشاء مسلسل في أي تطبيق, لإن القيمة ممكن تتكرر في البيئة متعدد المستخدمين.

في أبكس تقدر تعمل Process وتسيليكت القيمة من Sequence, كده

If your_pk is null then 
select your_seq.nextval from dual;
end if;

وتقدر بعيد عن الأبكس تعين قيمة إفتراضية لعمود المفتاح الرئيسي في الداتابيز, وماتعملش حاجة في الأبكس إطلاقا.

بتاريخ:
في ١٨‏/٥‏/٢٠٢٣ at 11:50, eslam elbyaly said:

الطريقة دي غلط لإنشاء مسلسل في أي تطبيق, لإن القيمة ممكن تتكرر في البيئة متعدد المستخدمين.

في أبكس تقدر تعمل Process وتسيليكت القيمة من Sequence, كده


If your_pk is null then 
select your_seq.nextval from dual;
end if;

وتقدر بعيد عن الأبكس تعين قيمة إفتراضية لعمود المفتاح الرئيسي في الداتابيز, وماتعملش حاجة في الأبكس إطلاقا.

بالتأكيد ال Sequence أفضل, الحل السابق في حالة لم يكن هناك Sequence على الداتا بيز.

مشكور على المشاركة 

بتاريخ:

السلام عليكم ورحمة الله وبركاته
الافضل فى وجهه نظهري انه القيمة يتم انشائها فى Trigger  على مستوى الداتابيز وليس من خلال الابليكشن
حاول تقلل دايما الprocess  اللى رايحة وراجعة من الداتابيز
 

CREATE OR REPLACE TRIGGER TriggerName
BEFORE INSERT  ON yourTable 
FOR EACH ROW
DECLARE

v_MAX_PK NUMBER ;

BEGIN

if :new.PrimaryKey is null then
SELECT NVL(MAX(PrimaryKey),0)+1 
INTO v_MAX_PK
FROM yourTable ;

:NEW.PrimaryKey := v_MAX_PK ;
end if;
END TriggerName;
 

 

 

وممكن تستخدم  Sequence   بدلا من الجزء ده 

 

SELECT NVL(MAX(PrimaryKey),0)+1 
INTO v_MAX_PK
FROM yourTable ;

 

تم تعديل بواسطة ENG_HOSSAM_WALLY

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

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

بتاريخ:
  • كاتب الموضوع
في ٢٧‏/٣‏/٢٠٢٣ at 17:42, eslam elbyaly said:

مبدأيا, طريقة الـ max(id) لازم تضيف ليها nvl عشان هيطلع no_data_found لو الجدول لسة فاضي.

ثانيا: الطريقة دي غلط في الـ multi user environment.

بالنسبة لأبكس, تقدر تعمل Process وتكتب فيها 


If :Your_pk_item is null 
then 
select your_seq.nextval into :your_pk_item from dual;
end if;

نصيحة: ما تتعلمش بالطريقة دي, بالذات في الأداة دي. هتضيع عمرك ومش هتوصل لمستوى يحترم. 

شوف كتاب كويس أو كورس كويس وذاكر ومارس وطبق الي ذاكرته عشان توصل لمستوى كويس.

وفقك الله لما يحب ويرضى.

 

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

اشرك على النصيحة 

بتاريخ:
في ١٩‏/٥‏/٢٠٢٣ at 17:07, ENG_HOSSAM_WALLY said:

لسلام عليكم ورحمة الله وبركاته
الافضل فى وجهه نظهري انه القيمة يتم انشائها فى Trigger  على مستوى الداتابيز وليس من خلال الابليكشن
حاول تقلل دايما الprocess  اللى رايحة وراجعة من الداتابيز
 

أبكس أصلا عبارة عن Component في الداتابيز. احنا بنبعت Request للداتابيز عشان تعمل Processing لكل الـ Components في الـ Page. فانت كده كده رايح وراجع من الداتابيز. 

- التريجر هيبقى Database Object زيادة, وMeta data زيادة لغرض أبسط من كده.

- حتى لما تعمل Page Process, فده Component زيادة هيتخزن ليه Meta data في الداتابيز.

- طبعا كل ده مش هيفرق في حاجة لو بتشتغل في Scale صغير, لكن بيفرق في الأبلكيشنز الكبيرة طبعا.

- مع العلم ان أبكس نفسه بيعمل Process للبرايماري كي لما تعمل فورم بالويزارد بالكود المذكور فوق, وبيعمل Before Insert Trigger بالكود الي انت ذكرته, لما تنشأ جدول عن طريق الـ Object Browser. بس ده مش معناه انه Best Practice.

تم تعديل بواسطة eslam elbyaly

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

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

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

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

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

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.