پیشرفت و امکانات جدید آرایه ها در اوراکل 21C

پیشرفت و امکانات جدید آرایه ها در Database Oracle 21C
در این مقاله در قسمت دیتابیس قصد داریم در مورد پیشرفت و امکانات جدید آرایه ها در Oracle 21C به جهت پر کردن مجموعه ها با استفاده از عبارات ، امکانات و قابلیت های جدیدی را ارائه داده که شرایط را آسان تر می کند آشنا خواهیم شد.
در این مقاله زمیوس ارائه شده فرض بر این است شما دوستان بر موارد زیر دانش کافی داشته باشید:
- آشنایی با انواع مختلف مجموعه های Oracle
- آشنایی با دستورات و عبارات PL/SQL از اوراکل 18C
- آشنایی با پیشرفتهای جدید تکرار FOR LOOP که در پایگاه داده Oracle 21C
- آشنایی با کرسرها و bulk binds.
راه اندازی
برخی از مثالهای این مقاله از آبجکت ها زیر استفاده می کنند.
عبارت زیر داده های جدول را نمایش می دهد.
همه مثالها در محیط SQLcl اجرا می شوند و فرض کنید امکان server output را فعال کرده اید.
نماد موقعیت برای Associative Array
از اوراکل 18c به بعد ما توانسته ایم یک آرایه (Associative Array (index-by-table را با استفاده از عبارت واجد شرایط و ارتباط نامگذاری کنیم اما در اوراکل 21C به ما این امکان را می دهد که آرایه های Associative Array را با استفاده از نماد موقعیتی positional notation پر کنیم ، شبیه به نحوه ایجاد جداول تو در تو nested tables و آرایه های varrays. هنگام پر کردن یک آرایه Associative Array با استفاده از نماد موقعیت positional notation ، شاخص Index یک عدد صحیح از 1 تا N است که بر اساس ترتیب عناصر مشخص شده است.
Basic Iterator - تکرار کننده اصلی
یک Basic Iterator می تواند یک مجموعه collection با شرایط زیر فراهم کند:
Index : شمارنده ای که به مقدار مجموعه تخصیص داده می شود و کاملا منحصربه فرد است.
Value : همان مقدار مجموعه می باشد که شمارنده مجموعه index از طریق عبارت "<=" به مقدار اختصاص داده می شود.
مثال زیر یک مجموعه ای می باشد از شمارنده index از شماره 1 تا 5 و مقادیری از i + 10 می باشد.
این عبارت های مجموعه می تواند به انواع دیگری هم محاسبه شود ما در مثال زیر از مجموعه از نوع VARCHAR2 که از طریق شماره ایندکس به معادل حروف شمارنده index را به عنوان value نمایش می دهد.
ما می توانیم از طریق مثال زیر دستور بالا را به صورت امکان و قابلیت جدیدی که در اوراکل 21C برای For Loop می باشد استفاده کنیم. که این مثال شامل مرحله تکرار stepped iteration ، پرش skipping و توقف stopping می باشد.
Index Iterator
یک تکرار کننده فهرست Index Iterator مجموعه را به شکل زیر نمایش می دهد:
Index : شمارنده ای که به مقدار مجموعه تخصیص داده می شود و کاملا منحصربه فرد است و با علامت "<=" به مقدار مورد نظر نظیر به نظیر اختصاص داده می شود.
Value : همان مقدار مجموعه می باشد که شمارنده مجموعه index از طریق عبارت "<=" به مقدار اختصاص داده می شود.
مثال زیر یک مجموعه ای می باشد از شمارنده index از شماره 10 تا 50 و مقادیری از 100 تا 500 می باشد.
عبارات زیر می توانند به انواع مختلف ارزیابی شوند. ما در مثال زیر از مجموعه ای استفاده می کنیم که شماره index آن براساس تاریخ و مقادیر آن براساس نوع داده ای VARCHAR2 می باشد.
همچنین ما می توانیم از اوراکل 21C به بعد از قابلیت و امکان جدیدی در For Loop معرفی شده است استفاده کنید. در مثال زیر شمارنده و حلقه شامل مرحله step , پرش skip و توقف stop می باشد.
دنباله تکرار کننده - Sequence Iterator
ساختار یک مجموعه دنباله تکرار کننده Sequence Iterator به شکل زیر می باشد :
Index : مقادیر شماره از 1 تا N می باشد و این شمارنده ها هیچ وابستگی و ربطی به هم می تواند نداشته باشد.
Value : همان مقدار مجموعه می باشد که شمارنده مجموعه index از طریق عبارت "<=" به مقدار اختصاص داده می شود.
مثال زیر یک مجموعه ای می باشد از شمارنده index از شماره 11 تا 15 و مقادیری از i+10 می باشد.
عبارات زیر می توانند به انواع مختلف ارزیابی شوند. ما در مثال زیر از مجموعه ای نوع داده ای VARCHAR2 استفاده می کنیم و آن را با کلمه معادل iterand پر می کنیم.
همچنین ما می توانیم از اوراکل 21C به بعد از قابلیت و امکان جدیدی در For Loop معرفی شده است استفاده کنید. در مثال زیر شمارنده و حلقه شامل مرحله step , پرش skip و توقف stop می باشد.
آرایه های Nested Tables و Varrays
تمامی مثال هایی که تا اینجا زده شد تماما روی آرایه (associative arrays (index-by tables انجام شده است اما می توان امکان Index Iterator و Sequence Iterator را روی آرایه هایی از نوع Nested Tables و Varrays پیاده کرد.
در مثال تلاش کردیم از basic iterator استفاده کنیم که در نتیجه جواب همیشه یک خطا error دارد.
اگر در مجموعه شمارنده را از 1 شروع نکنیم ، Basic Iterator تکرار کننده فهرست کار عجیبی انجام می دهد یا اگر عبارت سمت چپ مجموعه علامت "<=" را تغییر دهیم. این عناصر مجموعه خالی را ایجاد می کند.
من مطمئن نیستم که این کار عمدی است یا اشکالی دارد.
فراهم کردن مجموعه ها از جداول دیتابیس
راه های زیادی در وجود دارد که می تواند آرایه ها و مجموعه هایی را از جداول دیتابیس ایجاد و فراهم کنید. یکی از موثرترین راه ها استفاده از bulk bind می باشد که با آرایه های associative arrays , nested table و varrays کار می کند. ما در مثال زیر از شرط BULK COLLECT برای ایجاد و build کردن آرایه associative arrays که داده های آن را از جدول T1 می خواند و استفاده می کند. متاسفانه ایندکس های آرایه associative arrays فقط یک اعداد متوالی sequence از 1 تا N می باشد به جای اینکه ایندکس ها از ستون primary key جدول T1 باشد.
اگر بخواهید اطلاعات بیشتری در مورد bulk binds بدانید مقاله آشنایی با bulk binds را مطالعه کنید.
اگر ما بخواهیم یک آرایه associative arrays از محتوی جدول ایجاد کنیم که مقادیر index آرایه از ستون primary key باشد بایستی دستوو و اسکریپت مثال زیر را انجام دهید. ما یک آرایه associative arrays به صورت (index-by table) ایجاد میکنیم که در این مثال زیر یک آبچکت type براساس نوع داده ای رکوردهای جدول یه نام (tab_t) تعریف کرده ایم و یک متغیری به نام (l_tab) براساس نوع جدول تعریف می کنیم و سپس داده ها را در کرسر قرار داده و با استفاده از حلقه For Loop تمامی رکوردهای جدول را واکشی کرده و در آرایه قرار می دهیم.
با افزایش بهینه دستورات جدید ، می توانیم مجموعه آرایه ای را در یک مرحله ایجاد کنیم. ما type جدول را به همان روش تعریف می کنیم ، اما می توانیم مجموعه آرایه را از کوئری و مستقیماً با استفاده از constructor نوع جدول و یک basic iterator بر اساس کوئری پر کنیم. ما از INDEX iterator استفاده می کنیم تا نشان دهیم می خواهیم ایندکس مجموعه آرایه بر اساس ستون ID از کوئری باشد.
این واقعیت که ما از یک تکرار کننده iterator استفاده می کنیم به این معنی است که در صورت نیاز به عملکرد پرش skipping و توقف stopping تکرار کننده دسترسی داریم. مثال زیر با استفاده از شرط WHEN برای مطابقت سطرها با مقدار ستون ID جدول که زوج باشد استفاده می کند. البته ، می توانید فرض کنید که این امر بهتر است در کوئری انجام شود.
اگر به این که ایندکس های آرایه با ستون های primary key جدول یکی نباشد اهمیت ندهید و از آن استفاده نکنید می توانید به جای آن از یک SEQUENCE iterator شمارنده به هم مرتبط استفاده کنید که به صورت پیش فرض default sequence است.
در مثال قبلی ما از کرسر صریح implicit cursor استفاده کردیم. Iterators شمارنده ها به طرز عجیبی خوب و سازگاربا کرسر صریح implicit cursor کار می کند.
ما در مثال هایمان می توانیم از کرسرهایی Ref Cursor استفاده کنیم اما دو نکته مهم را بایستی در نظر بگیریم. اول این که کرسرهای Ref Cursor خودمان بایستی Open و سپس دستور Close را بنویسیم و دوم اینکه ما مجبور شدیم عملیات را به طور نوع explicitly یا صریح ایجاد کنیم ، زیرا از یک کرسرهای Ref Cursor در این عملیات ضعیف عمل می کند.
مستندات اوراکل نشان می دهد که می توان از SQL های داینامیک و پویا و با استفاده از دستور EXECUTE IMMEDIATE استفاده کنید ، اما به نظر می رسد استفاده از آن خطا error ایجاد می کند.
برای مطالعه بیشتر لینک های زیر را مشاهده کنید:
- Cursor Iteration Controls
- Qualified Expressions Overview
- Qualified Expressions Enhancements in Oracle Database 21c (part 1)
- Qualified Expressions Enhancements in Oracle Database 21c (part 2)
- Qualified Expressions (Populating Record Types and Associative Arrays) in PL/SQL in Oracle Database 18c
- FOR LOOP Iteration Enhancements in Oracle Database 21c
- Collections in Oracle PL/SQL
- Bulk Binds (BULK COLLECT & FORALL) and Record Processing in Oracle

کار با Built-in Functions در پایتون (2)
در این مقاله زمیوسی در بخش آموزش قصد داریم در مورد کار با Built-in Functions در پایتون صحبت کنیم. شما قبلاً با محبوب ترین تابع در پایتون یعنی ()print آشنا شدید.

Cheat Sheet در پایتون - مبانی پایتون (1)
پایتون 3 یک زبان برنامه نویسی واقعا همه کاره است که دوستش دارم هم برای توسط توسعه دهندگان وب web developers، دانشمندان داده data scientists و ...

10 وب سایت برای حل تمام سوالات مربوط به برنامه نویسی
در این مقاله زمیوسی، قصد داریم در مورد 10 سایت که برای حل تمام سوالات مربوط به برنامه نویسی شما صحبت کنیم. در هنگام یادگیری برنامه نویسی یا توسعه یک نرم افزار ....

APEX_ZIP : مدیریت فایل های Zip از PL/SQL
در این قسمت از آموزش مقاله زمیوس در بخش دیتابیس قصد داریم مجدد با یکی از قابلیت های APEX آشنا شویم در این مقاله با استفاده از پکیج APEX_ZIP ...