PDA

View Full Version : کرسر چیه وکجا باید از کرسر استفاده کنیم؟



zizi_zizi69
شنبه 13 آذر 1389, 16:12 عصر
من اینطور متوجه شدم که ،ما در ان واحد فقط یک رکورد رو می تونیم روش عملیات انجام بدیم،و زمانی که جواب query ما پیش از یک رکورد باشه یعنی یک Result Set داشته باشیم دیگه نمی تونیم روی آنها پردازش داشته باشیم مگر اینکه رکورد _رکورد اونا رو بخونیم که در اینصورت باید برای هر رکورد یک select بنویسم .پس ترجیحا از یک کرسر استفاده می کنیم که اشاره گری به اولین رکورد result Set ما هست بعد رکوردها رو یکی یکی می خونیم و پردازش مورد نظر رو روی هر رکورد انجام میدیم.
مثال:مثلا یک جدول کارمند داریم که شامل یکسری اطلاعات هست ما فقط فیلدهای مانند نام و نام خانوادگی و حقوق رو می خوایم ولی قبل از پرداخت حقوق باید این 10درصدش ازش کسر بشه.
خوب شرایط برای استفاده از کرسر محیاست بیشتر از یک رکورد درایم و باید فیلد حقوق هر رکورد پردازش بشه و بعد نمایش داده بشه.

Select from employee firstName, lastName, (salary-salary*10/100) as totalSalary
خوب من اینونه بدون کرسر نوشتم ،بدون هیچ مشکلی !
برای بدست اوردن totalsalary رکورد به رکورد خونده شده وعملیات مربوطه برای بدست اوردن totalsalary انجام شده ،آیا اینجا همان مفهوم internal cursor مطرح هست؟
وسوال دیگه ای که دارم اینه که این کرسر چیه فقط یک اشاره گر هست و فضا با اندازه اون در حافظه اشغال می کنه یا اینکه کل result set با اون pointer به رکورد هاش رو می گن cursor ؟

حمیدرضاصادقیان
شنبه 13 آذر 1389, 16:29 عصر
سلام.
معمولا زمانی از Cursor استفاده میکنند بخواهند سطر به سطر نوعی محاسبات بازگشتی انجام بدن. مثلا بخوان مانده حسابهارو به صورت سطر به سطر محاسبه کنند.
در اینجاست که از کرسر استفاده می کنند. یعنی زمانی که شما نیاز داشته باشی مقدار سطر فعلی با سطر قبلیت عملی انجام بده.
وگرنه برای اینکه هرسطر خودش مقداری رو داشته باشه نیازی به کرسر نیست. و خیلی از کوئریهایی که عرض کردم رو میشه با شیوه های غیر کرسر نیز پیاده سازی کرد فقط مقداری پیچیدگی اون بیشتر میشه ولی بعضی مواقع سرعتش نیز افزایش پیدا میکنه.
در نسخه های 2005و2008 میشه کاری که با کرسر انجام میدیم به نوعی با Recursive with انجام داد.
خود Cursor در واقع نوعی اشاره گر هست که به اون اشاره گر Cursor گویند.