JavaScript is not enabled!...Please enable javascript in your browser

جافا سكريبت غير ممكن! ... الرجاء تفعيل الجافا سكريبت في متصفحك.

Startseite

شرح Oracle Identity Column

 


مقدمة عن Oracle identity column

في الاصدار 12C من قواعد بيانات إدخلت اوراكل طريقة جديدة لتعريف العمود كـ identity في الجداول وهي نفسAUTO_INCREMENT في MySQL أو IDENTITY في SQL Server.

وتعتبر الـ identity column مفيدة جداً عندما يكون العمود المفتاح الرئيسي  primary key في الجدول ، عندما تقوم بإدخال صف جديد الى identity column أو عمود المفتاح الرئيسي ، أوراكل تقوم بتوليد رقم بشكل تلقائي ثم تقوم بإدخال قيم متسلسلة الى العمود.

ولتعريف عمود من نوع  identity column يتم إستخدامه كالتالي :-

GENERATED [ ALWAYS | BY DEFAULT [ ON NULL ] ]
AS IDENTITY [ ( identity_options ) ] 

  • أولاً : كلمة GENERATED كلمة إجبارية.
  • ثانياً : يمكنك إختيار إحدى الخيارات التالية لتوليد IDENTITY :-
    • GENERATED ALWAYS : أوراكل تقوم دائماً بإنشاء قيمة لعمود ألـ IDENTITY  ، ومحاولة إدخال قيمة في العمود يعطي أخطاء.
    • GENERATED BY DEFAULT : تنشى أوراكل القيمة في عمود في حال عدم إضافة إي قيمة من قبل المستخدم ، وفي حالة قمت بإضافة القيمة ، فستقوم أورأكل بإضافة هذه القيمة ، وبالنسبة لهذا الخيار إذا تم إدخال قيمة Null فستعطي أوراكل خطأ
    • GENERATED BY DEFAULT ON NULL : تقوم أورأكل بإضافة قيمة للعمود في حالة قام المستخدم بإدخال قيمة Null  أو قيمة فارغة.
  • ثالثاً : يمكنك الحصول على المزيد من الخيارات لعمود IDENTITY  :-
    • START WITH initial_value : القيمة الاولية التي يتم إدخالها الى عمود IDENTITY  ، وغالبا ما تكون القيمة الاولية الافتراضية هي 1.
    • INCREMENT BY internval_value : يحدد الفترة بين القيم المتولدة ، وغالبا ما تكون القيمة الافتراضية هي 1.
    • CACHE : يحدد مجموعة من القيم التي يجب على اوراكل إنشاؤها مسبقا لتحسين الاداء . يمكن تحديد هذا الخيار للعمود الذي يحتوي على عدد كبير ن الإدخالات.

مثال على Oracle identity column


دعونا ناخذ بعض الامثلة على استخدام Oracle identity
  • مثال على GENERATED ALWAYS 

تنشى العبارة التالية جدولاً يسمى identity_table  يحتوي على عمود identity 


CREATE TABLE identity_table (
    id NUMBER GENERATED ALWAYS AS IDENTITY,
    description VARCHAR2(100) NOT NULL
);

العبارة التالية لإضافة صف جديد الى جدول identity_table  
INSERT INTO identity_table(description)
VALUES('Oracle identity column demo with GENERATED ALWAYS');
ونظراً لأننا لم ندخل قيمة الى عمود فد تم إنشاء تلقائيا قيمة متسلسلة تبدأ من 1.
SELECT
    *
FROM
    identity_table;
العبارة التالية لإدراج قمية إلى عمود الـ identity 


INSERT INTO identity_table(id,description)
VALUES(2,
       'Oracle identity column example with GENERATED ALWAYS ');
في هذه الحالة أوركل ستعطي الخطاء التالي :

SQL Error: ORA-32795: cannot insert into a generated always identity column

وهذا بسبب انه تم تعريفه GENERATED ALWAYS ، ولهذا لايمكن قبول أي قيمة مقدمة.

مثال على GENERATED BY DEFAULT

دعونا نقوم بتغير عمود id الى GENERATED BY DEFAULT 


DROP TABLE identity_demo;

CREATE  TABLE identity_demo  (
    id NUMBER GENERATED BY DEFAULT AS IDENTITY,
    description VARCHAR2(100) not null
  );
العبارة التالية لعملية إدخال صف جديد الى جدول identity_table


DROP TABLE identity_table;

INSERT INTO identity_table(description)
VALUES('Oracle identity column demo with GENERATED BY DEFAULT');

وهذه هي النتيجة المتوقعة.

الجملة التالية لعملية إضافة صف جديد الى جدول مع قيمة مدخلة الى عمود id .

INSERT INTO identity_table(id,description)
VALUES(2, 'Oracle identity column example with GENERATED BY DEFAULT');
وهذه هي النتيجة للقيمة التي تم إدخالها.
SELECT
    *
FROM
    identity_table;
والمثال التي لعملية إدخال قيمة null الى العمود id.

INSERT INTO identity_table(id,description)
VALUES(NULL,
       'Oracle identity column demo with GENERATED BY DEFAULT, NULL value');
سيعطي أوراكل الخطأ التالي :-
SQL Error: ORA-01400: cannot insert NULL into ("OT"."IDENTITY_DEMO"."ID")

مثال على GENERATED BY DEFAULT ON NULL

نقوم اولاً بتغير ال id في جدول identity_table الى GENERATED BY DEFAULT ON NULL 



DROP TABLE identity_table;

CREATE  TABLE identity_table  (
    id NUMBER GENERATED BY DEFAULT ON NULL AS IDENTITY,
    description VARCHAR2(100) not null
  );
العبارة التالية لعملية إدخال صف جديد الى جدول identity_table بدون قيمة في عمود الـ id ، وبشكل تلقائي ستعمل اوراكل على توليد قيمة وإدخالها .

INSERT INTO identity_table(description)
VALUES('Oracle identity column demo with no value');R2(100) not null
  );
المثال التالي لعملية إدخل قيمة null الى عمود وذلك بسب ان العمود تم تعريفه كـ GENERATED BY DEFAULT ON NULL ، وستقوم اوراكل بتوليد قيم متسلسلة لإستخدامها في عملية الإدخال
INSERT INTO identity_table(description)
VALUES('Oracle identity column demo with null');
NameE-MailNachricht