آموزش اوراکل PL/SQL قسمت سوم – عملگرهای PL/SQL

کامپایلر زبان PL/SQL با توجه به نوع عملگر استفاده شده در برنامه، عملیات خاصی را بر روی داده ها انجام می دهد. عملگرها به 5 دسته تقسیم می شوند که در ادامه هر کدام را با مثال توضیح می دهیم.

1.عملگرهای ریاضی

2.عملگرهای رابطه ای

3.عملگرهای مقایسه ای

4.عملگرهای منطقی

5.عملگرهای رشته ای

(بیشتر…)

پارامتر MAX_IDLE_BLOCKER_TIME در اوراکل 19c

با تنظیم پارامتر MAX_IDLE_BLOCKER_TIME می توان sessionای که رکورد(به صورت کلی منبعی را) در اختیار گرفته و در پی آن منجر به block شدن session دیگری شده است را بعد از مدتی زمان مشخصی، kill کرد البته با این شرط که این session(ه blocker) در این مدت زمان، idle باشد.

برای مثال، با اجرای دستور زیر، blocker بعد از آنکه به مدت یک دقیقه در وضعیت idle قرار بگیرد، kill خواهد شد.

(بیشتر…)

Update بخشی از اطلاعات JSON با کمک تابع JSON_MERGEPATCH – اوراکل 19c

قصد داریم در جدول MYTBL، بخشی از اطلاعات ستون ettelaat که از نوع JSON می باشد را update کنیم به این صورت که مقدار داده first_name، برای id شماره 1، از Vahid به RamTollah تغییر کند:

SQL> select id,ettelaat from mytbl d where id=1;

        ID ETTELAAT

———- ——————————

   1          {

               “first_name“:”Vahid“,

               “last_name“:”Usefzadeh“,

               “Salary“:”500000“,

               “phone“:”09128110000

               }

با انجام بروزرسانی به شیوه رایج در اوراکل، با خطا مواجه خواهیم شد:

SQL> update MYTBL  d set d.ettelaat.first_name =’RamTollah’ where  d.ettelaat.first_name=’Vahid’ and id=1;

ORA-40557: cannot update a JSON value

(بیشتر…)

آموزش اوراکل PL/SQL قسمت دوم – متغیر ، CONSTANT و LITERAL در PL/SQL

در زبان PL/SQL متغیر (VARIABLE) نامی است که به یک محل ذخیره سازی اختصاص می یابد و برنامه ها می توانند اطلاعات خود را در این محل ذخیره کنند. هر متغیر بر اساس یک نوع داده تعریف می شود. انواع نوع داده ها را در متن قبل توضیح دادیم. در واقع نوع داده برای یک متغیر موارد زیر را مشخص می کند.

1.سایز متغیر

2.قالب کلی متغیر

3.محدوده مقدارهایی که می توانیم در متغیر ذخیره کنیم.

4.عملیاتی که می توانیم روی آن متغیر انجام دهیم.

بنابراین به هر متغیر یک قسمت از فضای حافظه اختصاص می یابد و با استفاده از نام متغیر می توانیم به این فضا دسترسی داشته باشیم.

(بیشتر…)

استفاده از Unified auditing در حالت read only و محیط دیتاگارد

همانطور که می دانید، زمانی که دیتابیس در حالت read only قرار دارد امکان ثبت اطلاعات در جداول دیتادیکشنری از بین خواهد رفت این قاعده برای جداول مربوط به auditing(نظیر aud$unified) هم صادق است از اینرو نمی توان عملیات انجام شده توسط کاربران را در دیتابیس ذخیره کرد.

در این شرایط، در صورت استفاده از قابلیت Unified auditing، اوراکل auditهای انجام شده را در محیط سیستم عامل ثبت خواهد کرد.

عملیات انجام شده توسط کاربران در قالب فایلهای باینری، با پسوند bin. و در مسیر ORACLE_BASE/audit/$ORACLE_SID$ ثبت خواهند شد و امکان مشاهده محتویات این فایلهای باینری از طریق ویوی unified_audit_trail فراهم می شود.

(بیشتر…)

خارج کردن اطلاعات یک دستور از shared pool

ممکن است در شرایطی بخواهید صرفا فرم پارس شده یکی از دستورات را از حافظه خارج کنید، در این صورت می توانید از بسته DBMS_SHARED_POOL.PURGE استفاده کنید.

SQL>select ADDRESS, HASH_VALUE,sql_text from V$SQLAREA where  SQL_TEXT like ‘%delete mytbl where %’ and SQL_TEXT not like ‘%v$sql%’;

SQL> exec sys.DBMS_SHARED_POOL.PURGE ‘00000000774B91E0,3503309987′,’C’);

PL/SQL procedure successfully completed


SQL>select ADDRESS, HASH_VALUE,sql_text from V$SQLAREA where  SQL_TEXT like ‘%delete mytbl where %’ and SQL_TEXT not like ‘%v$sql%’;

no rows selected

توجه: پارامتر دوم در پروسیجر Purge(کارکتر C)، به نوع object اشاره دارد که علامت اختصاری objectها را در قسمت زیر می بینید:

–P   package/procedure/function        –JS   java source

–Q  sequence                                        –JC    java class

–R  trigger                                             –JR     java resource

–T  type                                                 –JD     java shared data

KEEP AUXILIARY در اوراکل 19c

همانطور که می دانید ایجاد دستی و یا خودکار Auxiliary Instance در زمان انجام عملیاتی چون Duplicate، PDB Point-in-Time Recovery، Table Point-in-Time Recovery و … الزامی می باشد البته با انجام هر کدام از این عملیاتها، Auxiliary Instance حذف خواهد شد و امکان استفاده از استفاده از این instance به صورت کلی از بین خواهد رفت.

(بیشتر…)

نکته ای در مورد elapsed_time برای parallel queyها

در گزارش AWR و همچنین ویوهایی نظیر V$SQLه، elapsed_timeای که برای parallel queryها نمایش داده می شود، جمع بین زمان سپری شدهquery coordinator و parallel query slaveها می باشد از این جهت، نباید این عدد را با elapsed_time واقعی پرس و جو اشتباه گرفت.

مثال زیر را ببینید:

SQL> select /*+parallel(3)*/ sum(id),sum(code),avg(count) from usef.myview;

   SUM(ID)  SUM(CODE) AVG(COUNT)

———- ———- ———-

 713031680 3548381184 68.1508522

Elapsed: 00:01:18.89

SQL> /

   SUM(ID)  SUM(CODE) AVG(COUNT)

———- ———- ———-

 713031680 3548381184 68.1508522

SQL> /

Elapsed: 00:01:17.08

SQL> /

   SUM(ID)  SUM(CODE) AVG(COUNT)

———- ———- ———-

 713031680 3548381184 68.1508522

Elapsed: 00:01:17.94

پس از اجرای دستورات فوق، در گزارش AWR خواهیم دید که Elapsed Time برای query اجرا شده برابر با 228 ثانیه می باشد در صورتی که این query در مدت زمان80 ثانیه(حدودا) اجرا شده است:

 

زبان های SQL و PL/SQL و تفاوت آنها

SQL(مخفف STRUCTURED QUERY LANGUAGE) یک زبان قدرتمند ولی ساده برای کار با بانک های اطلاعاتی است. SQL در ابتدا توسط شرکت IBM پیاده سازی شده است. در ادامه موسسه جهانی استاندارد، زبان SQL را به عنوان یک زبان رابطه ای برای کار با دیتابیس های از نوع رابطه ای تعیین کرده است. بنابراین زبان SQL به طور کامل مطابق با استانداردهای جهانی است.

(بیشتر…)