ESC را فشار دهید تا بسته شود

زمیوس آموزش، یادگیری و سرگرمی

آموزش کامل پکیج DBMS_UTILITY در Oracle Database

مقدمه : استفاده از پکیج DBMS_UTILITY در اوراکل چه اهمیتی دارد؟

در توسعه و مدیریت بانک‌های اطلاعاتی Oracle، استفاده از ابزارهای داخلی که کارها را سریع‌تر و دقیق‌تر انجام می‌دهند اهمیت ویژه‌ای دارد. یکی از این ابزارها پکیج DBMS_UTILITY است.

این پکیج برنامه نویسی pl/sql مجموعه‌ای از توابع و پروسیجرها را در اختیار ما قرار می‌دهد که در کارهای مختلفی مانند مدیریت زمان، تبدیل نام‌ها، اجرای دستورات DDL، و پردازش رشته‌های متنی به ما کمک می‌کند.

در این مقاله آموزش Oracle قصد داریم DBMS_UTILITY را به صورت کامل معرفی کنیم و برای هر کدام از امکانات آن، یک مثال کاربردی ارائه دهیم.

اگر می خواهید در مورد پکیج DBMS_LOB در بخش آموزش PL/SQL بیشتر آشنا بشید نوشته زیر را مطالعه کنید:

در این نوشته شما می خوانید

DBMS_UTILITY چیست؟

DBMS_UTILITY یک پکیج سیستمی در Oracle Database است که برای انجام عملیات‌های مدیریتی و کمکی ایجاد شده است.

این عملیات شامل محاسبه زمان اجرا، تجزیه نام آبجکت‌ها، اجرای داینامیک دستورات DDL، تبدیل آرایه به رشته و بالعکس، تحلیل آمار اسکیما و بررسی وضعیت دیتابیس می‌شود.

این ابزار به توسعه‌دهندگان و مدیران پایگاه داده کمک می‌کند تا فرآیندهای کاری خود را بهینه‌تر و ساده‌تر مدیریت کنند.

توابع و پروسیجرهای پکیج DBMS_UTILITY در اوراکل

۱. GET_TIME

توضیح:

تابع GET_TIME مقدار زمان جاری را از شروع دیتابیس (instance startup) به صورت واحد ۱/۱۰۰ ثانیه بازمی‌گرداند.

مثال:

				
					DECLARE
   v_start NUMBER;
   v_end   NUMBER;
BEGIN
   v_start := DBMS_UTILITY.GET_TIME;
   DBMS_LOCK.sleep(2); -- Sleep 2 Sanie
   v_end := DBMS_UTILITY.GET_TIME;
   DBMS_OUTPUT.put_line('Zamani Separi Shode: ' || (v_end - v_start));
END;
/
				
			

۲. CURRENT_TIME و CURRENT_DATE

توضیح:

  • CURRENT_TIME زمان جاری دیتابیس را به صورت عددی باز می‌گرداند.
  • CURRENT_DATE تاریخ جاری دیتابیس را باز می‌گرداند.

مثال:

				
					BEGIN
   DBMS_OUTPUT.put_line('Tarikh Feli: ' || DBMS_UTILITY.CURRENT_DATE);
   DBMS_OUTPUT.put_line('Zamani Feli: ' || DBMS_UTILITY.CURRENT_TIME);
END;
/

				
			

۳. NAME_TOKENIZE

توضیح:

تابع NAME_TOKENIZE یک رشته ورودی شامل نام اسکیما، جدول و ستون را به اجزای تشکیل‌دهنده‌ی آن تقسیم می‌کند.

مثال:

				
					DECLARE
   v_schema VARCHAR2(30);
   v_table  VARCHAR2(30);
   v_column VARCHAR2(30);
   v_extra  VARCHAR2(30);
BEGIN
   DBMS_UTILITY.NAME_TOKENIZE('HR.EMPLOYEES.SALARY', v_schema, v_table,
   v_column, v_extra);
   DBMS_OUTPUT.put_line('Schema: ' || v_schema);
   DBMS_OUTPUT.put_line('Table: ' || v_table);
   DBMS_OUTPUT.put_line('Column: ' || v_column);
   DBMS_OUTPUT.put_line('Meghdat Ezafi: ' || v_extra);
END;
/

				
			

۴. FORMAT_CALL_STACK

توضیح:

این تابع، مسیر تماس‌ها (Call Stack) در لحظه‌ی اجرا را به صورت یک رشته متنی باز می‌گرداند.

مثال:

				
					CREATE OR REPLACE PROCEDURE inner_proc IS
BEGIN
   DBMS_OUTPUT.put_line(DBMS_UTILITY.FORMAT_CALL_STACK);
END;
/

BEGIN
   inner_proc;
END;
/

				
			

۵. EXEC_DDL_STATEMENT

توضیح:

پروسیجر EXEC_DDL_STATEMENT امکان اجرای مستقیم دستورات DDL مانند CREATE, ALTER, DROP را فراهم می‌کند.

مثال:

				
					BEGIN
   DBMS_UTILITY.EXEC_DDL_STATEMENT('CREATE TABLE TEST_TABLE (ID NUMBER)'
   );
END;

				
			

۶. TABLE_TO_COMMA

توضیح:

تابع TABLE_TO_COMMA یک آرایه (table of varchar2) را به یک رشته‌ی جدا شده با کاما تبدیل می‌کند.

مثال:

				
					DECLARE
   v_list VARCHAR2(4000);
BEGIN
   DBMS_UTILITY.TABLE_TO_COMMA(
      tablenames => SYS.DBMS_UTILITY.uncl_array('EMPLOYEES',
      'DEPARTMENTS', 'JOBS'),
      tablenames_string => v_list
   );
   DBMS_OUTPUT.put_line(v_list);
END;
/

				
			

خروجی: EMPLOYEES,DEPARTMENTS,JOBS.

۷. COMMA_TO_TABLE

توضیح:

تابع COMMA_TO_TABLE برعکس TABLE_TO_COMMA عمل می‌کند. یعنی یک رشته‌ی جدا شده با کاما را تبدیل به آرایه می‌کند.

مثال:

				
					DECLARE
   v_array DBMS_UTILITY.uncl_array;
   v_count BINARY_INTEGER;
BEGIN
   DBMS_UTILITY.COMMA_TO_TABLE('A,B,C', v_count, v_array);
   FOR i IN 1 .. v_count LOOP
      DBMS_OUTPUT.put_line('Value:' || i || ': ' || v_array(i));
   END LOOP;
END;
/

				
			

۸. IS_CLUSTER_DATABASE

توضیح:

این تابع بررسی می‌کند که دیتابیس در محیط کلاستر (RAC) اجرا می‌شود یا به صورت single instance.

مثال:

				
					DECLARE
   v_is_cluster BOOLEAN;
BEGIN
   v_is_cluster := DBMS_UTILITY.IS_CLUSTER_DATABASE;
   IF v_is_cluster THEN
      DBMS_OUTPUT.put_line('Database is Cluster');
   ELSE
      DBMS_OUTPUT.put_line('Database is Single');
   END IF;
END;
/

				
			

۹. ANALYZE_SCHEMA

توضیح:

پروسیجر ANALYZE_SCHEMA برای تحلیل (Analyze) و ایجاد آمار دیتابیس روی تمامی آبجکت‌های یک اسکیما استفاده می‌شود.

مثال:

				
					BEGIN
   DBMS_UTILITY.ANALYZE_SCHEMA('HR', 'COMPUTE');
END;
/

				
			

توجه: بهتر است برای آمارگیری دقیق‌تر از پکیج DBMS_STATS استفاده شود.

۱۰. CANONICALIZE

توضیح:

تابع CANONICALIZE یک رشته ورودی را به فرمت استاندارد تبدیل می‌کند. اسپیس‌های اضافه را حذف کرده و حروف کوچک را به بزرگ تغییر می‌دهد.

مثال:

				
					DECLARE
   v_string VARCHAR2(4000);
BEGIN
   v_string := DBMS_UTILITY.CANONICALIZE(' hr. employees.salary  ');
   DBMS_OUTPUT.put_line(v_string);
END;
/
				
			

خروجی: HR.EMPLOYEES.SALARY

خلاصه توابع پکیج DBMS_UTILITY

نام تابع/پروسیجر کاربرد
GET_TIME محاسبه زمان نسبی اجرا به صورت ۱/۱۰۰ ثانیه
CURRENT_TIME / CURRENT_DATE دریافت زمان و تاریخ جاری دیتابیس
NAME_TOKENIZE تجزیه نام آبجکت به بخش‌های مختلف
FORMAT_CALL_STACK نمایش استک تماس‌های جاری
EXEC_DDL_STATEMENT اجرای دستورات DDL به صورت داینامیک
TABLE_TO_COMMA تبدیل آرایه به رشته جدا شده با کاما
COMMA_TO_TABLE تبدیل رشته کامادار به آرایه
IS_CLUSTER_DATABASE تشخیص اجرای دیتابیس در حالت RAC
ANALYZE_SCHEMA تحلیل آمار دیتابیس برای یک اسکیما
CANONICALIZE استانداردسازی و تمیز کردن رشته متنی

سوالات متداول درباره پکیج DBMS_UTILITY در اوراکل

پکیج DBMS_UTILITY یکی از بسته‌های سیستمی Oracle است که توابع و پروسیجرهایی برای مدیریت زمان، تجزیه و تحلیل نام آبجکت‌ها، اجرای داینامیک دستورات DDL، و پردازش رشته‌های متنی فراهم می‌کند.

این پکیج به توسعه‌دهندگان و مدیران پایگاه داده کمک می‌کند تا عملیات مدیریتی را سریع‌تر و ساده‌تر انجام دهند.

DBMS_UTILITY بیشتر برای کارهای عمومی مدیریتی مانند اجرای دستورات داینامیک یا تحلیل سریع استفاده می‌شود، در حالی که DBMS_STATS به طور تخصصی برای جمع‌آوری و به‌روزرسانی آمار (Statistics) جداول، ایندکس‌ها و اسکیماها در دیتابیس Oracle طراحی شده است. برای آمارگیری بهتر است از DBMS_STATS استفاده شود.

با استفاده از پروسیجر EXEC_DDL_STATEMENT در DBMS_UTILITY می‌توانید به صورت داینامیک دستورات DDL مانند CREATE TABLE یا ALTER TABLE را اجرا کنید. مثلاً:

BEGIN
DBMS_UTILITY.EXEC_DDL_STATEMENT(‘CREATE TABLE sample_table (id NUMBER)’);
END;
/

تابع NAME_TOKENIZE در Oracle برای تجزیه‌ی نام‌های کامل آبجکت‌ها به بخش‌های جداگانه (اسکیما، جدول، ستون) استفاده می‌شود.

این تابع به ویژه در پردازش خودکار نام‌های داینامیک و ولیدیشن ورودی‌ها بسیار مفید است.

نتیجه‌گیری

پکیج DBMS_UTILITY ابزاری بسیار مهم در Oracle Database است که با ارائه‌ی توابع و پروسیجرهای کمکی، مدیریت پایگاه داده و توسعه نرم‌افزار را سریع‌تر و ساده‌تر می‌کند.
استفاده از این پکیج در پروژه‌های واقعی باعث می‌شود تا کارهای تکراری کمتر شود و تمرکز بیشتری روی طراحی و بهینه‌سازی سیستم داشته باشیم.

📢 نظر شما چیست؟ اگر شما هم اطلاعات و تجربه خوبی در استفاده از پکیج DBMS_UTILITY دارید خوشحال میشم در بخش نظرات، تجربه های ارزشمندتان را با ما به اشتراک بگذارید! 🚀

میثم راد

من یه برنامه نویسم که حسابی با دیتابیس اوراکل رفیقم! از اونایی ام که تا چیزی رو کامل نفهمم،ول کن نیستم، یادگرفتن برام مثل بازیه، و نوشتن اینجا کمک می کنه تا چیزایی که یاد گرفتم رو با بقیه به شریک بشم، با هم پیشرفت کنیم.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *