
مقدمه : استفاده از پکیج 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 دارید خوشحال میشم در بخش نظرات، تجربه های ارزشمندتان را با ما به اشتراک بگذارید! 🚀
دیدگاهتان را بنویسید