منبع اصلی نوشتار زیر در این لینک قرار دارد

نوع داده ای رکورد در اوراکل

Record نوع دیگری از داده ها در اوراکل است که می توان در بلاک های PL/SQL از آنها استفاده کرد. نوع داده ای رکورد ترکیبی از دیگر انواع داده اسکالر مانند char, varchar, number و غیره است. هر نوع داده ای اسکالر در رکورد یک مقدار را نگه می دارد که می توان رکورد را به عنوان یک سطر در نظر گرفت. مقادیر هر سطر متشکل از انواع مختلف داده ای است. یک رکورد می تواند شامل تمامی محتوای یک سطر بشود. لازم است پیش از خواندن این مطلب، مطلب “آشنایی با PL/SQL – مقدمه ای بر PL/SQL” را بخوانید تا با بلاک PL/SQL و همچنین تعریف متغیر ها آشنا سوید.

فرض کنید که می خواهید فهرستی از کتاب ها را با خصوصیات مربوطه بدست آورید. هر کتاب دارای صفات عنوان، نویسنده، موضوع و شناسه کتاب هست که هر کدام به عنوان ستونی از جدول و دارای نعو اسکالر متفاوت (یا شاید یکسان) هستند. یک رکورد شامل فیلدی به ازای هر کدام از این ستون ها است که اطلاعات کتاب را به شکل بهتری نشان می دهد.در PL/SQL بر اساس سه نوع زیر رکورد ایجاد می شود :

  • رکورد های مبتنی بر جدول.
  • رکورد های مبتنی بر مکان نما.
  • رکورد های تعریف شده توسط برنامه نویس.

رکورد های مبتنی بر جدول

صفت ROWTYPE% برنامه نویس را قادر می سازد تا رکوردی مبتنی بر جدول یا مکان نما ایجاد کند. قطعه بلاک PL/SQL زیر نمونه ای از رکورد مبتنی بر جدول را نشان می دهد که در آن رکوردی به نام customer_rec که فیلد های آن، ستون های جدول customers هستند، ایجاد شده است. مقداردهی فیلد های رکورد توسط دستور SELECT انجام می شود.

oraclerecorde1

که می تواند خروجی مانند زیر داشته باشد. همچنین جدول دارای پنج ستون id و name و address و salary است که از این رو رکورد نیز دارای پنج فیلد متناظر با نوع ستون ها می باشد. توجه کنید که خروجی زیر تنها یک سطر از جدول را با شرط id=5 در خروجی چاپ کرده است، اما چون از رکورد استفاده کرده ایم، فرمت نمایش سطر را در خروجی را به گونه ای سفارشی کرده ایم.

Customer ID: 5
Customer Name: Hardik
Customer Address: Bhopal
Customer Salary: 9000
PL/SQL procedure successfully completed

رکورد های مبتنی بر مکان نما

همانطور که گفته شد، صفت ROWTYPE% برنامه نویس را قادر می سازد تا رکوردی مبتنی بر جدول یا مکان نما ایجاد کند. بلاک PL/SQL زیر یک مکان نما به نام customer_cur ایجاد می کند و داده های سه ستون از جدول customers را درون آن ریخته و سپس توسط دستور FETCH دادهای درون مکان نما را در یک حلقه LOOP به درون فیلد های رکورد منتقل می کند. عمل واکشی یا FETCH تا زمانی که دیگر هیچ سطری برای واکشی وجود نداشته باشد، صورت خواهد گرفت که توسط  customer_cur%notfound مشخص شده است. چونکه سه ستون از جدول را در SELECT انتخاب کردیم، پس رکورد نیز دارای سه فیلد و نوع آنها متناظر با ستونش است.

oraclerecorde2

به عنوان مثال دیگری از رکورد های مبتنی بر مکان نما بلاک PL/SQL زیر که در آن در قسمت مشخص شده به رنگ قرمز توسط emp_id& یک اعلان یا پیغام نشان داده می شود تا  یک عدد به عنوان شناسه کارمند یا emplyee_id وارد شود. در بخش سبز رنگ سپس رکورد ایجاد خواهد شد. در بخش آبی رنگ اول اگر یک سطر مطابق با شناسه ورودی پیدا شد، پیغام Employee Information for ID به همراه داده های بدست آمده چاپ خواهد شد، در غیر اینصورت پیغام No matching employee for the given ID چاپ خواهد شد که نشان می دهد هیچ سطری مطابق با شناسه ورودی تطابق نداشته است. در بخش EXEPTION نیز اگر هیچ سطری پیدا نشده بود، پیغام No employee matches the given emp ID نشان داده می شود.

oraclerecorde3

رکورد های تعریف شده توسط برنامه نویس

اوراکل امکان تعریف رکوردها را توسط برنامه نویس فراهم کرده است. رکورد ها نوع داده ترکیبی هستند که از چندین فیلد تشکیل شده اند. در مثال جدول کتاب و ستون های مختلف کتاب که در ابتدا گفته شد، یک رکورد شامل ستون های جدول کتاب دارای چندین فیلد (یک یا چند یا همه ستون های جدول) است که هر کدام نوع داده ای متفاوتی مطابق با نوع ستون متناظرشان را دارند. برای تعریف یک رکورد توسط برنامه نویس لازم است نخست یک نوع ترکیبی ایجاد کنیم. در شکل زیر توسط دستور TYPE یک نوع ترکیبی که دارای نام type_name است ایجاد می شود. نوع ترکیبی دارای چندین فیلد است که هر کدام دارای نوع خودشان هستند. در نهایت و در خط پایانی یک رکورد به نام record-name از نوع type_name ایجاد کرده ایم.

oraclerecorde4

فرض کنید می خواهیم اطلاعات کتاب را از جدول books را در خروجی نشان دهیم که دارای ستون های زیر است :

  • title از نوع varchar
  • author از نوع varchar
  • subject از نوع varchar
  • book_id از نوع number

با دستور شکل زیر نوع داده ترکیبی به نام books را که فیلد های آن همنام و هم نوع (هم نوع بودن لازم است) با ستون های جدول است را ایجاد می کنیم و سپس دو رکورد به نام های book1 و book2 را از نوع ایجاد شده (به نام books) ایجاد می کنیم.

oraclerecorde5

پس از تعریف و در بخش بدنه و زیر BEGIN می توانیم فیلد های یک رکورد را مانند متغیر ها مقدار دهی کنیم. یعنی به آنها توسط علامت انتساب در PL/SQL یک مقدار را اختصاص دهیم. علامت انتساب =: است و نباید از علامت = برای انتساب استفاده کنیم، چونکه علامت = برای بررسی تساوی و مساوی بودن در دستور IF استفاده می شود. شکل کلی دسترسی به یک فیلد از رکورد به صورت زیر است :

RECORD_NAME.FIELD_NAME

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

;RECORD_NAME.FIELD_NAME := VALUE

oraclerecorde6

به عنوان مثال دیگر فرض کنید می خواهید اطلاعات چندین کارمند (چندین سطر) را از جدول employees بدست آورید و آنها را در متغیر هایی ریخته و سپس پردازش کنید. طبق تعریف رکورد، می توانید به جای داشتن چندین متغیر مجزا، یک رکورد با فیلد هایی به تعداد ستون های واکشی شده از جدول ایجاد کنید و مقادیر را در آن ذخیره کنید. در قطعه بلاک زیر می بینید که رکوردی به نام emp_info_rec ایجاد شده است.

oraclerecord7

در مثال بالا می بینید که به طور مثال فیلدی به نام first به صورت زیر تعریف شده است که در آن employees نام جدول و first_name نام ستون است و TYPE% یعنی فیلد first از نوع ستون firs_name از جدول employees باشد. هدف ازمثال بالا نشان دادن گونه دیگری از تعریف فیلد و تعیین نوع آن است که به طور خودکار از نوع ستون جدول در نظر گرفته می شود.

first  employees.first_name%TYPE



برچسب ها : ,