إنتقال للمحتوى

  • تسجيل الدخول عبر الفيس بوك تسجيل الدخول عبر تويتر Log In with LinkedIn Log In with Google      تسجيل دخول    
  • إنشاء حساب

صورة
- - - - -

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


2 رد (ردود) على هذا الموضوع

#1 محمد سعيد

محمد سعيد

    عضو مميز

  • الأعضــاء
  • 534 مشاركة
  • البـلـد: Country Flag

تاريخ المشاركة 17 January 2010 - 09:17 AM

اخوانى الكرام الموضوع باختصار هو ان فى جدول فيه بيانات معجونه ومفيش فيه مفتاح اساسى المطلوب
اريد اضافة عمود لجدول به داتا بحيث يكون هذا العمود مفتاح اساسى بحيث يبدأ بالرقم 1 وهكذا يعنى مسلسل

#2 tanbet

tanbet

    عضو

  • الأعضــاء
  • 43 مشاركة
  • البـلـد: Country Flag

تاريخ المشاركة 17 January 2010 - 10:22 AM

في قدامك أكثر من حل
أحدهما انك تضيف عمود عادي أولا الى الجدول ومن ثم تدخل فيه البيانات وأخيرا تجعله مفتاح رئيسي كالآتي :
1 اضافة عمود جديد الى الجدول:
alter table table_name add(col_name number)


2 اضافة البيانات وهي كما أفهم أنها متسلسلة كعداد يعني
update table_name 
set col_name = rownum


3 اعلان هذا العمود كمفتاح أساسي للجدول
alter table table_name add constraint col_pk primary key(col_name )


بعد ذلك سبكون لهذا الجدول مفتاح أساسي.

#3 mk3bmw

mk3bmw

    عضو نشط

  • الأعضــاء
  • 234 مشاركة
  • البـلـد: Country Flag

تاريخ المشاركة 17 January 2010 - 10:26 AM

ضيف الحقل الذي تريد وضعه مفتاح أساسي
[b]ALTER TABLE[/b] TABLE_NAME [b]ADD[/b] COLUMN_NAME DATA TYPE

وقم بتعريف PRIMARY KEY CONSTRAINT
[b]ALTER TABLE[/b] TABLE_NAME [b]ADD CONSTRAINT[/b] PK_NAME [b]PRIMARY KEY[/b] (COLUMN NAME)

ثانيا: قم ببناء SEQUENCE

CREATE SEQUENCE seqname [ INCREMENT BY increment ]
[ MINVALUE minvalue ] [ MAXVALUE maxvalue ]
[ START WITH start ] [ CACHE cache ] [ CYCLE ]



قم بعمل PROCEDURE يقوم باضافة قيم ال SEQUENCE على الحق الموجود بالجدول
مثلا: لنفترض انك قمت بتعريف الحق SERIAL على جدول EMP
وال SEQUENCE اسمه SERIAL_SEQ
يكون الPROCEDURE كالتالي:

CREATE OR REPLACE PROCEDURE ADD_SERIAL_TO_EMP AS V_SERIAL NUMBER;
CURSOR C1 IS SELECT * FROM EMP; BEGIN FOR I IN C1 LOOP
SELECT SERIAL_SEQ.NEXTVAL INTO V_SERIAL FROM DUAL;
UPDATE EMP
SET SERIAL = V_SERIAL
WHERE EMPNAME = I.EMPNAME
(بالنسبة لجملة WHERE) ضع جميع الحقول واربطهم بالCURSOR
END LOOP;
END;

ان شاء الله تكون استفدت