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

تكرار البيانات في نفس الجدول

Featured Replies

بتاريخ:

السلام عليكم ؛؛؛

 

لدي شاشة نوعها Tabular و عليها 10 items.

 

اريد ادخال نفس البيانات في الجدول.

 

لكن تقابلني مشكلة ال Primary Key.

 

ارجو المساعدة...

 

**ارجو ممن لديه فكرة للحل لا يبخل بها فزكاة العلم نشره

بتاريخ:

ماهو نوع البريميري الخاص بك .. وهل هناك مشكلة في حذفه ؟؟؟

بتاريخ:

هى دى فائدة البرايمارى كى, لو مش عايزه, شيله, بس في الغالب في حاجة غلط.

اشرحلنا الموضوع احسن.

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

 

                        

 دلوقتي انا ظهر لي على الفورم بيانات الموظفين من 100 الى 150 مثلا تمام؟

عاوز احفظ نفس البيانات لكن بارقام  جديدة مثلا من 12500 الى 12550                        

محتاجا اكررهم بس هيخدوا id مختلف ؟

و اشكركم على التفاعل

 

تم تعديل بواسطة M. Faramawy

بتاريخ:

ما تكررهم , ايه المشكلة؟ وايه علاقة ده بالبرايمارى كى مادام مش هتقربله اصلا؟

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

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

يا باشا ازاي

 و كل ROW ليه primary key

عند اعادة ادخال نفس البيانات بنفس ال primary key  بيحدث مشكلة

لان بضطر الى حفظ كل صف على حده و ذلك للحصول على

max(nvl(emp_id,0)+1)

بتاريخ:

انا مقلتش حط نفس البرايمارى كى والله.

- انت بتدخل الداتا ازاى؟

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

من خلال الفورم

بكتب الكود ده:

declare
cursor c_emp is select employee_id,last_name,hire_date,salary,department_id from employees;
v_max number;
begin
for i in c_emp loop
first_record;
select max(nvl(employee_id,0)+1) into v_max from employees;
:department_id :=i.department_id;
:employee_id:=v_max;
standard.commit;
next_record;
exit when :system.last_record='TRUE';
end loop;


end;

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

بتاريخ:

انا مش عارف ايه الى انت عايز تعمله, لكن عموما.

البلوك بتاعك المفروض انه يبقى عليه تريجر pre-insert مكتوب فيه

select nvl(max(employee_id),0) + 1 from table_name , مش select max(nvl زى ما بتكتب.

 

2- عدل الكرسور بتاعك وشيل منه employee_id.

3- first_record قبل اللوب مش جواه وقبلها go_block('block_name').

4- انت مش حاطط الاعمدة الى انت جايبها في الكرسور في اى أيتمز زى منتا عامل في :department_id.

5- exit when حطها قبل الـ next_record.

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

اقولك يا ريس الموضوع من البداية:

انا عندي بيانات المرتبات الخاصة بالموظفين.

عند عمل مرتبات الشهر الجديد بيتم استدعاء نفس مرتبات الشهر الماضي مع تعديلات بسيطه .

# لاني مش هينفع ادخل كل مفردات المرتب لكل موظف كل شهر

 

يارب اكون قدرت اوصلك اللي عاوزه 

بتاريخ:

طب وانت ليه من الاصل تعمل عمود يشيل مرتب الموظف, ما يبقى Flag يقول ان الراجل أخد مرتبه وخلاص Y Or N ويبقى checkbox فى الشاشة ما دام كل واحد مرتبه معروف.

انت ادرى بالبزنس بتاعك.

عموما الطريقة الى قلتهالك تحل المشكلة باذن الله .

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

طب ممكن يا باشا توضيح اكتر لموضوع الFLAG ده الله يكرمك

تم تعديل بواسطة M. Faramawy

بتاريخ:

عمود بيشيل قيمة من 2

Y OR N

YES OR NO

1 ,2

قيمة منهم للاثبات والتانية للنفى

1 يعنى أخد مرتب

2 يعنى مأخدش

وتمثلهم على الشاشة بتشيك بوكس

Checked يعنى استلم مرتبه

unchecked يعنى لم يستلم.

بتاريخ:

أنا ما أعرفه أن الـ Cursor عند إستخدامه في إسترجاع البيانات لا يجعل ولا يهيئ الـ block في حالة  تحديث ..لذلك أي تحديث على البيانات يعتبرها إدخال جديد ويحفظها بـ id مختلف 

بمعنى فكرة الأخ إسلام ما ذكره من تعديلات على cursor  وإضافة كود الـ max في pre-insert  هي يتم إستخدامها 

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

الاخت/ميسم  الكرام

اشكرك على التواصل بعد الانقطاع.

 

الفكرة كما اوضحت سابقا هي انني بحاجه لاعداد رواتب الموظفين  الشهرية

مما يضطرني لاخذ نسخة من رواتب الشهر السابق مع التعديلات الجديدة. ثم الحفظ.

هل هناك طريقة لذلك؟

بتاريخ:

نفترض ان لديك جدول Table_name به (150) سجل تريد اعادة ادخالهم ولكن بأرقام 

 

بامكانك استخدام الاستعلام التالي مباشرة 

insert into table_name (primary_key,Colm_2,Colm_3,Colm_4,Colm_5)
​select rownum+150 ,Colm_2,Colm_3,Colm_4,Colm_5 from table_name

بالتوفيق ... 

بتاريخ:

 

الفكرة كما اوضحت سابقا هي انني بحاجه لاعداد رواتب الموظفين  الشهرية

مما يضطرني لاخذ نسخة من رواتب الشهر السابق مع التعديلات الجديدة. ثم الحفظ.

هل هناك طريقة لذلك؟

 

اعتقد ان فكرة ان يكون نفس الموظف له أكثر من رقم وظيفي فكرة غير صحيحه 

اي انه مع كل شهر رواتب يكون للموظف رقم جديد بالإضافة الى تكرار بياناته الأساسية الاسم والعنوان والهاتف و ....  

سؤال : اذا طلب منك اجمالي ما صرفه الموظف خلال فترة معينه ... كيف ستكون طريقة الحساب ؟ 

 

من المفترض ان يكون لديك

- جدول بيانات اساسية للموظف  ( رقم الموظف - اسم الموظف - تاريخ التعييين -  الراتب الأساسي - العنوان - الادارة التي يعمل بها - + بيانات اخرى مرتبطه بشخص الموظف .. ) 

ومفتاح الجدول هو رقم الموظف 

 

- جدول بيانات مفردات بنود حركة الرواتب الشهرية 

رقم الموظف ورقم الشهروالسنة  ورقم البند للاستحقاق أو رقم البند للاستقطاع او للحسم - القيمة او المبلغ

مفتاح الجدول مركب من ( رقم الموظف + رقم الشهر + السنة + رقم البند ) 

مثال 

رقم الموظف - رقم البند - المبلغ

100  - 101 ( الراتب الأساسي ) - 2000

100 - 102 ( بدل طبيعه عمل ) - 200 

100 - 1xx ( بند استحقاق ) 

100 - 201 ( خصم غياب ) - 100  قيمة محسوبه 

100 - 202 ( خصم تأمينات اجتماعية  ) - 180 قيمه محسوبه 

100 - 2xx بند خصم 

 

الاجراء

يتم تجهيز بيانات مفردات الراتب كل شهر للعناصر الثابته استتناجا من بيانات مفردات الشهر السابق

 

في النهاية يجب ان يكون لديك قاعدة بيانات تحتوى البيانات الثابته والمتغيرة حتى يمكن استخراج التقارير والإحصائيات من البيانات بالإضافة للمرونه في إجراء العمليات الحسابيه  

 

صافي الراتب الشهري = اجمالي بنود الإستحقاقات - اجمالي بنود الحسميات (الخصومات ) 

 

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

رقم الموظف - شهر الراتب - السنه - اجمالي بنود الاستحقاقات - اجمالي بنود الحسميات - طريقة صرف الراتب ( يدوي - شيك - تحويل بنكي ) - رقم الحساب البنكي المرسل اليه الراتب + أيه بيانات مرتبطه بطبيعة الراتب الشهريه التي ممكن أن تختلف من شهر الى اخر 

  • بعد 8 شهور...
بتاريخ:
  • كاتب الموضوع

اشكرك جدا 

الحل ممتاز لكنه يشترط ان يكون عدد ال rows 150

ماذا لو اردت اضافة 150 سجل جديد رغم وجود 10سجلات فقط في قاعدة البيانات

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

نفترض ان لديك جدول Table_name به (150) سجل تريد اعادة ادخالهم ولكن بأرقام 

 

بامكانك استخدام الاستعلام التالي مباشرة 

insert into table_name (primary_key,Colm_2,Colm_3,Colm_4,Colm_5)
​select rownum+150 ,Colm_2,Colm_3,Colm_4,Colm_5 from table_name

بالتوفيق ... 

تاريخ المشاركة اليوم, 03:25 PM

اشكرك جدا 

الحل ممتاز لكنه يشترط ان يكون عدد ال rows 150

ماذا لو اردت اضافة 150 سجل جديد رغم وجود 10سجلات فقط في قاعدة البيانات

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

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

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

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

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

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.