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

مشكلة في انشاء primary_key

Featured Replies

بتاريخ:

السلام عليكم ورحمه الله وبركاته
اخواني انا اسف لتضيع وقتكم في مشاكلي ولكني اسأل الله ان يبدلكم نورا
ولكني لدي مشكلة في انشاء primary_key ولا اريد استخدام الـ sequence لاني لو مسحت احد الحقول فسوف يحصل gap ولست بحاجة لهذا ولا اعرف اذا كان ما اقوله صحيح ام خطأ وارجو منكم ان تبلغوني اذا كان كلامي خاطئا .
لهذا استعنت بالـ rownum ولكن المشكلة انه لا يستجيب الا للقيد الاول ويهمل باقي القيود وكانه غير موجود .
فهل المشكلة في النسخة التي نصبتها في الجهاز ام ان العيب في انا,
وهذه نسخة عن البرنامج الذي تحدث فيه المشكلة
> create or replace procedure primary_key
2 is
3 nou inter.id11%type:=0;
4 begin
5 select count(*) into nou
6 from inter;
7 for i in 1..nou loop
8 update inter
9 set id11=i
10 where rownum=i;
11 end loop;
12 end primary_key;


وحتى لو قمت بالعمل من دون procedure فان المشكلة نفسها تواجهني
update inter
set id11=2
where rownum=2
هل هذه مشكلتي وحدي ام انها حدثت معكم .
فانا اليوم التمس من اخوتي المساعدة فهل من مجيب
والسلام عليكم ورحمة الله وبركاته ........


E_mail:[email protected]

بتاريخ:

اخى ابى المجيد
السلام عليكم ورحمة الله وبركاته
والسلام على اهل العراق جميعاً من الموصل حتى البصرة

واليك الحل التالى :

بافتراض ان الجدول Employees به الحقل emp_id
ويوجد نموذج به حقول هذا الجدول
يمكنك اخى استخدام الكود التالى فى Pre-Insert Trigger

SELECTNVL(MAX(emp_id),0) +1
INTO :emp_id ;from employees


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

ولك تحياتى
اسامه سليمان
القاهرة

بتاريخ:

Dear Questionaire


FIRST , u cant put such condtion rownum = x unless x = 1 ( it's a logic think about it, rownum holds the count of the returned rows )
SECOND to do it in ur way , u have to use cursor and select for update , and update where current of cursor
i.e
CREATE OR REPLACE PROCEDURE PRIMARY_KEY IS
NOU number := 1;
CURSOR EMP_CUR IS
SELECT *
FROM EMPS
ORDER BY WHAT_EVER_U_WANT
FOR UPDATE ;
BEGIN

FOR REC IN EMP_CUR
LOOP
UPDATE EMPS SET ID = NOU
WHERE CURRENT OF EMP_CUR ;
NOU := NOU + 1 ;
END LOOP;
COMMIT ;
END PRIMARY_KEY;

THIRD
u said u wanna to avoid gaps ! but the code u write not avoid gaps upon delete
cause it just creates a filed to be a sequanced primary key in.
but after that any one can delete making the gaps that you wanna avoid
so first let me ask u something , y u want avoid gaps ?
u may want avoid gaps in a meaningfull field .. but one of the rules of the PK says " PK should be meaningless "

Huss.

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

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

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

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

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

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.