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



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

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

در این مقاله در قسمت دیتابیس قصد داریم در مورد  پیشرفت و امکانات جدید آرایه ها در Oracle 21C به جهت پر کردن مجموعه ها با استفاده از عبارات ، امکانات و قابلیت های جدیدی را ارائه داده که  شرایط را آسان تر می کند آشنا خواهیم شد.

در این مقاله زمیوس ارائه شده فرض بر این است شما دوستان بر موارد زیر دانش کافی داشته باشید:

  • آشنایی با انواع مختلف مجموعه های Oracle
  • آشنایی با دستورات و عبارات PL/SQL از اوراکل 18C
  • آشنایی با پیشرفتهای جدید تکرار FOR LOOP که در پایگاه داده Oracle 21C
  • آشنایی با کرسرها و bulk binds.

راه اندازی 

برخی از مثالهای این مقاله از آبجکت ها زیر استفاده می کنند.

Setup_1

عبارت زیر داده های جدول را نمایش می دهد.

Setup_2

همه مثالها در محیط SQLcl اجرا می شوند و فرض کنید امکان server output را فعال کرده اید.

Setup_3

نماد موقعیت برای Associative Array

از اوراکل 18c به بعد ما توانسته ایم یک آرایه (Associative Array (index-by-table  را با استفاده از عبارت واجد شرایط و ارتباط نامگذاری کنیم اما در اوراکل 21C به ما این امکان را می دهد که آرایه های Associative Array را با استفاده از نماد موقعیتی positional notation پر کنیم ، شبیه به نحوه ایجاد جداول تو در تو nested tables و آرایه های varrays. هنگام پر کردن یک آرایه Associative Array با استفاده از نماد موقعیت positional notation ، شاخص Index یک عدد صحیح از 1 تا N است که بر اساس ترتیب عناصر مشخص شده است.

نماد موقعیت برای Associative Array

Basic Iterator - تکرار کننده اصلی

یک Basic Iterator می تواند یک مجموعه collection با شرایط زیر فراهم کند:

Index : شمارنده ای که به مقدار مجموعه تخصیص داده می شود و کاملا منحصربه فرد است.

Value : همان مقدار مجموعه می باشد که شمارنده مجموعه index از طریق عبارت "<=" به مقدار اختصاص داده می شود.

مثال زیر یک مجموعه ای می باشد از شمارنده index از شماره 1 تا 5 و مقادیری از i + 10 می باشد.

Basic Iterator1

این عبارت های مجموعه می تواند به انواع دیگری هم محاسبه شود ما در مثال زیر از مجموعه از نوع VARCHAR2 که از طریق شماره ایندکس به معادل حروف شمارنده index را به عنوان value نمایش می دهد.

Basic Iterator2

ما می توانیم از طریق مثال زیر دستور بالا را به صورت امکان و قابلیت جدیدی که در اوراکل 21C برای For Loop می باشد استفاده کنیم. که این مثال شامل مرحله تکرار stepped iteration ، پرش skipping و توقف stopping می باشد.

Basic Iterator3

Index Iterator

یک تکرار کننده فهرست Index Iterator مجموعه را  به شکل زیر نمایش می دهد:

Index : شمارنده ای که به مقدار مجموعه تخصیص داده می شود و کاملا منحصربه فرد است و با علامت  "<="  به مقدار مورد نظر نظیر به نظیر اختصاص داده می شود.

Value : همان مقدار مجموعه می باشد که شمارنده مجموعه index از طریق عبارت "<=" به مقدار اختصاص داده می شود.

مثال زیر یک مجموعه ای می باشد از شمارنده index از شماره 10 تا 50 و مقادیری از 100 تا 500 می باشد.

Index Iterator3

عبارات زیر می توانند به انواع مختلف ارزیابی شوند. ما در مثال زیر از مجموعه ای استفاده می کنیم که شماره index آن براساس تاریخ و مقادیر آن براساس نوع داده ای  VARCHAR2 می باشد.

Index Iterator2

همچنین ما می توانیم از اوراکل 21C به بعد از قابلیت و امکان جدیدی در For Loop معرفی شده است استفاده کنید. در مثال زیر شمارنده و حلقه شامل مرحله step , پرش skip و توقف stop می باشد.

Index Iterator1

دنباله تکرار کننده - Sequence Iterator

ساختار یک مجموعه دنباله تکرار کننده  Sequence Iterator به شکل زیر می باشد :

Index : مقادیر شماره از 1 تا N می باشد و این شمارنده ها هیچ وابستگی و ربطی به هم می تواند نداشته باشد.

Value : همان مقدار مجموعه می باشد که شمارنده مجموعه index از طریق عبارت "<=" به مقدار اختصاص داده می شود.

مثال زیر یک مجموعه ای می باشد از شمارنده index از شماره 11 تا 15 و مقادیری از i+10 می باشد.

Sequence Iterator1

عبارات زیر می توانند به انواع مختلف ارزیابی شوند. ما در مثال زیر از مجموعه ای نوع داده ای VARCHAR2 استفاده می کنیم و آن را با کلمه معادل iterand پر می کنیم.

Sequence Iterator2

همچنین ما می توانیم از اوراکل 21C به بعد از قابلیت و امکان جدیدی در For Loop معرفی شده است استفاده کنید. در مثال زیر شمارنده و حلقه شامل مرحله step , پرش skip و توقف stop می باشد.

Sequence Iterator3

آرایه های Nested Tables و Varrays

تمامی مثال هایی که تا اینجا زده شد تماما روی آرایه (associative arrays (index-by tables انجام شده است اما می توان امکان Index Iterator و Sequence Iterator را روی آرایه هایی از نوع Nested Tables و Varrays پیاده کرد.

Nested Tables1

Nested Tables2

در مثال تلاش کردیم از basic iterator استفاده کنیم که در نتیجه جواب همیشه یک خطا error دارد.

Nested Tables3

اگر در مجموعه شمارنده را از 1 شروع نکنیم ، Basic Iterator تکرار کننده فهرست کار عجیبی انجام می دهد یا اگر عبارت سمت چپ مجموعه علامت "<=" را تغییر دهیم. این عناصر مجموعه خالی را ایجاد می کند.

Nested Tables4

Nested Tables5

من مطمئن نیستم که این کار عمدی است یا اشکالی دارد.

فراهم کردن مجموعه ها از جداول دیتابیس

راه های  زیادی در وجود دارد که می تواند آرایه ها و مجموعه هایی را از جداول دیتابیس ایجاد و فراهم کنید. یکی از موثرترین راه ها استفاده از bulk bind می باشد که با آرایه های associative arrays , nested table و varrays کار می کند. ما در مثال زیر از شرط  BULK COLLECT برای ایجاد و build کردن آرایه associative arrays که داده های آن را از جدول T1 می خواند و استفاده می کند. متاسفانه ایندکس های آرایه associative arrays فقط یک اعداد متوالی sequence از 1 تا N می باشد به جای اینکه ایندکس ها از ستون primary key جدول T1 باشد.

Varrays1

اگر بخواهید اطلاعات بیشتری در مورد bulk binds بدانید مقاله آشنایی با bulk binds را مطالعه کنید.

اگر ما بخواهیم یک آرایه associative arrays از محتوی جدول ایجاد کنیم که مقادیر index آرایه از ستون primary key باشد بایستی دستوو و اسکریپت مثال  زیر را انجام دهید. ما یک آرایه associative arrays به صورت (index-by table) ایجاد میکنیم که در این مثال زیر یک آبچکت type براساس نوع داده ای رکوردهای جدول یه نام (tab_t) تعریف کرده ایم و یک متغیری به نام (l_tab) براساس نوع جدول تعریف می کنیم و سپس داده ها را در کرسر قرار داده و با استفاده از حلقه For Loop تمامی رکوردهای جدول را واکشی کرده و در آرایه قرار می دهیم.

Varrays2

با افزایش بهینه دستورات جدید ، می توانیم مجموعه آرایه ای را در یک مرحله ایجاد کنیم. ما type جدول را به همان روش تعریف می کنیم ، اما می توانیم مجموعه آرایه را از کوئری و مستقیماً با استفاده از constructor نوع جدول و یک basic iterator  بر اساس کوئری پر کنیم. ما از INDEX iterator استفاده می کنیم تا نشان دهیم می خواهیم ایندکس مجموعه آرایه بر اساس ستون ID از کوئری باشد.

Varrays3

این واقعیت که ما از یک تکرار کننده iterator استفاده می کنیم به این معنی است که در صورت نیاز به عملکرد پرش skipping و توقف stopping  تکرار کننده دسترسی داریم. مثال زیر با استفاده از شرط WHEN برای مطابقت سطرها با مقدار ستون ID  جدول که زوج باشد استفاده می کند. البته ، می توانید فرض کنید که این امر بهتر است در کوئری انجام شود.

Varrays4

اگر به این که ایندکس های آرایه با ستون های primary key جدول یکی نباشد اهمیت ندهید و از آن استفاده نکنید می توانید به جای آن از یک  SEQUENCE iterator  شمارنده به هم مرتبط استفاده کنید که به صورت پیش فرض default sequence است.

Varrays5

در مثال قبلی ما از کرسر صریح implicit cursor استفاده کردیم. Iterators شمارنده ها به طرز عجیبی خوب و سازگاربا کرسر صریح implicit cursor کار می کند.

Varrays6

ما در مثال هایمان می توانیم از کرسرهایی Ref Cursor استفاده کنیم اما دو نکته مهم را بایستی در نظر بگیریم. اول این که کرسرهای Ref Cursor خودمان بایستی Open و سپس دستور Close را بنویسیم و دوم اینکه ما مجبور شدیم عملیات را به طور نوع explicitly  یا صریح ایجاد کنیم ، زیرا از یک کرسرهای Ref Cursor در این عملیات ضعیف عمل می کند.

Varrays7

مستندات اوراکل نشان می دهد که می توان از SQL های داینامیک و پویا و با استفاده از دستور EXECUTE IMMEDIATE استفاده کنید ، اما به نظر می رسد استفاده از آن خطا error ایجاد می کند.

Varrays8

برای مطالعه بیشتر لینک های زیر را مشاهده کنید: 

جهت ثبت پیام باید در سایت عضو شوید و یا وارد سایت شده باشید .
ورود به حساب کاربری / ایجاد حساب کاربری
کار با Built-in Functions در پایتون (2)

کار با Built-in Functions در پایتون (2)

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

Cheat Sheet در پایتون - مبانی پایتون (1)

Cheat Sheet در پایتون - مبانی پایتون (1)

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

10 وب سایت برای حل تمام سوالات مربوط به برنامه نویسی

10 وب سایت برای حل تمام سوالات مربوط به برنامه نویسی

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

APEX_ZIP : مدیریت فایل های Zip از PL/SQL

APEX_ZIP : مدیریت فایل های Zip از PL/SQL

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