مکاننمای آشکار در مقابل مکاننمای ضمنی
وقتی صحبت از پایگاههای داده میشود، مکاننما یک ساختار کنترلی است که اجازه عبور از روی رکوردهای یک پایگاه داده را میدهد. مکان نما مکانیزمی را برای اختصاص یک نام به دستور انتخاب SQL فراهم می کند و سپس می توان از آن برای دستکاری اطلاعات داخل دستور SQL استفاده کرد. مکان نماهای ضمنی به طور خودکار ایجاد می شوند و هر بار که دستور Select در PL/SQL صادر می شود، زمانی که مکان نما به صراحت تعریف نشده باشد، استفاده می شود. مکان نماهای واضح، همانطور که از نام آن پیداست، به صراحت توسط توسعه دهنده تعریف می شوند. در PL/SQL یک مکان نما آشکار در واقع یک پرس و جو با نام است که با استفاده از کلمه کلیدی مکان نما تعریف شده است.
مکاننمای ضمنی چیست؟
نشانگرهای ضمنی به طور خودکار توسط Oracle ایجاد می شوند و هر بار که بیانیه انتخابی صادر می شود، استفاده می شود. اگر از یک مکان نما ضمنی استفاده شود، سیستم مدیریت پایگاه داده (DBMS) عملیات باز کردن، واکشی و بستن را به طور خودکار انجام می دهد. نشانگرهای ضمنی باید فقط با دستورات SQL که یک ردیف را برمی گرداند استفاده شوند. اگر دستور SQL بیش از یک ردیف را برگرداند، استفاده از مکاننمای ضمنی یک خطا ایجاد میکند. یک مکان نما ضمنی به طور خودکار با هر دستور زبان دستکاری داده ها (DML)، یعنی عبارت های INSERT، UPDATE و DELETE مرتبط می شود. همچنین، یک مکاننمای ضمنی برای پردازش دستورات SELECT INTO استفاده میشود. هنگام واکشی دادهها با استفاده از مکاننماهای ضمنی، زمانی که دستور SQL هیچ دادهای را برمیگرداند، میتوان استثنا NO_DATA_FOUND را افزایش داد. علاوه بر این، وقتی دستور SQL بیش از یک ردیف را برمی گرداند، مکان نماهای ضمنی می توانند TOO_MANY_ROWS استثنا ایجاد کنند.
مکاننمای واضح چیست؟
همانطور که قبلا ذکر شد، مکان نماهای صریح کوئری هایی هستند که با استفاده از یک نام تعریف می شوند.یک مکان نما صریح را می توان به عنوان یک اشاره گر به مجموعه ای از رکوردها در نظر گرفت و نشانگر را می توان در مجموعه رکوردها به جلو حرکت داد. نشانگرهای صریح کنترل کاملی را بر روی باز کردن، بستن و واکشی داده ها در اختیار کاربر قرار می دهند. همچنین، چندین ردیف را می توان با استفاده از یک مکان نما صریح واکشی کرد. مکان نماهای صریح نیز می توانند مانند هر تابع یا رویه دیگری پارامترهایی را دریافت کنند تا هر بار که اجرا می شود متغیرهای مکان نما را می توان تغییر داد. علاوه بر این، نشانگرهای صریح به شما این امکان را می دهند که یک ردیف کامل را در یک متغیر رکورد PL/SQL واکشی کنید. هنگام استفاده از مکاننمای صریح، ابتدا باید با استفاده از یک نام اعلام شود. با استفاده از نامی که به مکان نما داده شده می توان به ویژگی های مکان نما دسترسی داشت. پس از اعلام، ابتدا باید مکان نما باز شود. سپس واکشی را می توان شروع کرد. اگر نیاز به واکشی چند ردیف باشد، عملیات واکشی باید در داخل یک حلقه انجام شود. در نهایت، مکان نما باید بسته شود.
تفاوت بین مکاننمای آشکار و مکاننمای ضمنی
تفاوت اصلی بین مکاننمای ضمنی و مکاننمای صریح در این است که مکاننمای صریح باید به طور صریح با ارائه یک نام تعریف شود، در حالی که وقتی دستور انتخاب را صادر میکنید، مکاننماهای ضمنی به طور خودکار ایجاد میشوند.علاوه بر این، چندین ردیف را می توان با استفاده از مکان نماهای صریح واکشی کرد در حالی که مکان نماهای ضمنی فقط می توانند یک ردیف را واکشی کنند. همچنین استثناهای NO_DATA_FOUND و TOO_MANY_ROWS در هنگام استفاده از مکان نماهای صریح، برخلاف مکان نماهای ضمنی، مطرح نمی شوند. در اصل، مکان نماهای ضمنی در برابر خطاهای داده آسیب پذیرتر هستند و کنترل برنامه ای کمتری نسبت به مکان نماهای صریح ارائه می دهند. همچنین، مکاننماهای ضمنی نسبت به مکاننماهای صریح کارآمدتر در نظر گرفته میشوند.