PDA

View Full Version : Primary Key Trigger



night11
دوشنبه 05 شهریور 1386, 18:56 عصر
سلام
من یه جدول دارم که یک کلید اصلی داره و این کلید باید ترتیبی باشه . و یک واحد یک واحد اضافه بشه . و مثلا محدوده براش مشخص می کنیم که تا فرضا 100 باشه و یا اگه نیاز شد بشه 200
حالا من اومدم یک تریگر After insert نوشتم .
البته کلید اصلی عددی هست و من اومدم اونو از نوع nvarchar2 تعریف کردم و مقدار دیفالت صفر رو توش وارد می کنم بعد تریگر من میاد تعداد رکورد ها رو شمارش می کنه و کلید اصلی رو آپدیت می کنه با شرط اینکه مقدار صفر باشه .(دیفالتی که خودم وارد می کنم برای اینکه همون رکورد آپدیت بشه چون وقتی شرط نزارم میاد همه رکورد ها رو آپدیت می کنه .) این مشکل منو حل می کنه اما نمی دونم این روش درست هست یا نه ؟

ممنون .

aidin300
دوشنبه 05 شهریور 1386, 20:13 عصر
چرا از Sequences استفاده نمی کنی ؟ یه Sequences تعریف کن که برات اعداد رو به ترتیب دلخواه تولید کنه اطلاعات بیشتر درباره استفاده از Sequences رو اینجا پیدا کن
Sequence Pseudocolumns (http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/pseudocolumns002.htm#i1009336) این روشی که استفاده کردی حداقل دوبار index scan می کنه

night11
دوشنبه 05 شهریور 1386, 20:28 عصر
چرا از Sequences استفاده نمی کنی ؟ یه Sequences تعریف کن که برات اعداد رو به ترتیب دلخواه تولید کنه اطلاعات بیشتر درباره استفاده از Sequences رو اینجا پیدا کن
Sequence Pseudocolumns (http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/pseudocolumns002.htm#i1009336) این روشی که استفاده کردی حداقل دوبار index scan می کنه

ممنون از راهنماییتون .
اول اینکه نمی دونم میشه برای Sequence ها از طریق برنامه نویسی (دات نت) محدوده تعیین کرد و در صورت نیاز محدوده رو افزایش داد ؟

دوم اینکه در صورتی که اطلاعات پاک بشه ترتیب شماره ها بهم می خوره .

aidin300
دوشنبه 05 شهریور 1386, 20:49 عصر
می تونی با استفاده از دستور ALTER SEQUENCE محدوده Sequences رو تغییر بدی
شما الان تعداد رکورد ها +1 رو به عنوان کلید درج می کنید؟

night11
دوشنبه 05 شهریور 1386, 21:00 عصر
می تونی با استفاده از دستور ALTER SEQUENCE محدوده Sequences رو تغییر بدی
شما الان تعداد رکورد ها +1 رو به عنوان کلید درج می کنید؟

بله دقیقا . چون باید به ترتیب باشند .

aidin300
دوشنبه 05 شهریور 1386, 21:16 عصر
تو هر دو روش ممکن مشکل به هم خوردن ترتیب پیش بیاد ولی تو روش شما اگه درست فهمیده باشم اگر فرضا یک رکورد قبل از آخرین رکورد حذف شده باشه در این صورت حتی کلید اصلی هم درست تولید نمی شه بهتر بود در اون صورت هم از Max(PK Column)+1 استفاده می کردی