در فرآیند توسعه ی برنامههای تحت وب با Oracle APEX، یکی از دغدغههای اصلی توسعه دهندگان، کارایی گزارش هاست. از آن جایی که گزارشها معمولاً شامل Queryهای سنگین بر روی جداول بزرگ هستند، دانستن مدت زمان اجرای آنها میتواند به پایش و بهبود عملکرد کمک شایانی کند.
Oracle APEX برای همین منظور یک جاینگهدار (Placeholder) داخلی به نام #TIMING# فراهم کرده است که در گزارشها قابل استفاده است.
TIMINGچیست؟
#TIMING# یک Placeholder اختصاصی گزارشها در Oracle APEX است که بعد از اجرای Query گزارش، با زمان اجرای همان گزارش (بر حسب ثانیه) جایگزین میشود.
به بیان ساده:
وقتی گزارشی اجرا میشود، APEX مدت زمان اجرای SQL مربوط به آن را محاسبه میکند. سپس اگر در قالب یا ناحیهای از گزارش عبارت #TIMING# قرار داشته باشد، این عبارت با مقدار محاسبهشده جایگزین میشود. در نتیجه، خروجی چیزی شبیه به مثال زیر خواهد بود:

کاربرد اصلی
- پایش و عیبیابی کارایی Queryها
- مقایسهی سرعت گزارشها قبل و بعد از بهینهسازی
- اطلاعرسانی به توسعهدهنده یا مدیر سیستم
توجه: معمولاً نمایش این اطلاعات برای کاربران نهایی توصیه نمیشود و بیشتر برای محیط توسعه و تست کاربرد دارد.
موارد استفاده از #TIMING# :
- Classic Report
- Interactive Report (IR)
نکته مهم: عبارت #TIMING# باید در بخشی از قالب (Template) قرار گیرد که پس از اجرای Query رندر میشود (مانند Footer یا ناحیهی After Rows).
در غیر این صورت، مقدار آن بهصورت خالی نمایش داده خواهد شد.
روش های استفاده :
1. قرار دادن در Footer گزارش
سادهترین روش این است که در تنظیمات Region گزارش، داخل Footer متن زیر را بنویسید:

2. قرار دادن در Template گزارش
برای استفادهی استانداردتر :
- مسیر: Shared Components → Templates → Report
- قالب گزارش موردنظر( مثلاً Standard ) را باز کنید.
- در بخش After Rows یا Footer عبارت زیر را اضافه کنید:
<div class=”t-Report-info”>زمان اجرا: #TIMING# ثانیه</div>
از این به بعد هر گزارشی که از این Template استفاده کند، زمان اجرا را نمایش خواهد داد.
همچنین میتوانید از #ROWS_FETCHED# و #TOTAL_ROWS# نیز بهره ببرید:
#ROWS_FETCHED#: تعداد ردیفهای واکشیشده در همان صفحه گزارش.
#TOTAL_ROWS#: تعداد کل ردیفهای خروجی Query، بدون در نظر گرفتن صفحهبندی.


نکات و محدودیتها
- وابسته به صفحهبندی: در گزارشهای صفحهبندیشده، تنها زمان اجرای
همان صفحهمحاسبه میشود و نه کل دادهها. - نمایش #ROWS_FETCHED# و #TOTAL_ROWS# در Classic Report: در InteractiveReport معمولاً فقط
#TIMING#نمایش داده میشود، چون IR سیستم شمارش و پیامهای پیشفرض خودش را دارد (مثل «نمایش 1 تا 50 از 328»). - تحت تأثیر Cache : اگر Region Caching فعال باشد، #TIMING# ثابت می ماند.
- قالببندی ثابت: مقدار همیشه بهصورت ثانیه و با سه رقم اعشار نمایش داده میشود و امکان تغییر آن وجود ندارد.
- عدم پشتیبانی در IG: برای Interactive Grid باید از روشهای دیگر( Instrumentation یا لاگگیری سفارشی) استفاده کرد.
تفاوت #TIMING# با Page Processing Time
Oracle APEX قابلیتی دارد به نام Page Processing Time که مدت زمان پردازش کل صفحه را نشان میدهد.
تفاوتها:
#TIMING# : فقط زمان اجرای Query گزارش
Page Processing Time: زمان کل پردازش صفحه شامل همه Regionها، فرآیندها و اجزای دیگر
برای یادگیری جامع و گامبهگام تمامی مفاهیم، پیشنهاد میکنیم به دوره آموزش مقدماتی اوراکل APEX مراجعه کنید و از پایه تا سطح پیشرفته با این پلتفرم قدرتمند آشنا شوید.
