
مقدمه : چرا باید UTL_RAW را بشناسیم؟
اگر توسعهدهنده Oracle هستید، دیر یا زود با دادههایی مواجه میشوید که به صورت باینری (RAW) ذخیره میشوند. مثلاً برای ذخیره فایل، ارسال داده به API، رمزنگاری، هش کردن یا پردازش پیامهای MQ و Web Services.
اینجاست که پکیج قدرتمند UTL_RAW وارد میدان میشود. این پکیج به شما امکان میدهد تا دادهها را به فرمت باینری تبدیل کنید، عملیات بیتبهبیت انجام دهید، و حتی از آنها برای رمزنگاری استفاده کنید.
در این مقاله آموزش اوراکل، به زبان ساده و همراه با مثالهای عملی، همه چیز درباره UTL_RAW را به شما یاد میدهم 💡
اگر می خواهید در مورد پکیج UTL_FILE در بخش آموزش PL/SQL بیشتر آشنا بشید نوشته زیر را مطالعه کنید:
در این نوشته شما می خوانید
UTL_RAW چیست و چه کاری انجام میدهد؟
UTL_RAW یک پکیج داخلی در Oracle PL/SQL است که برای پردازش دادههای باینری یا هگزادسیمال استفاده میشود.
کاربردهای اصلی آن:
- تبدیل بین انواع دادهای
VARCHAR2،NUMBERوRAW - انجام عملیات بیت به بیت (AND، OR، XOR)
- مقایسه دادههای RAW
- جایگزینی و برش دادههای RAW
- آمادهسازی دادهها برای رمزنگاری (
DBMS_CRYPTO)
مهمترین توابع UTL_RAW در Oracle
| تابع / پروسیجر | کاربرد |
|---|---|
| CAST_TO_RAW | تبدیل متن (VARCHAR2) به RAW |
| CAST_TO_VARCHAR2 | تبدیل RAW به متن |
| CAST_FROM_BINARY_INTEGER | عدد → RAW |
| CAST_TO_BINARY_INTEGER | RAW → عدد صحیح |
| BIT_AND / BIT_OR / BIT_XOR / BIT_COMPLEMENT | عملیات بیت به بیت |
| CONCAT | اتصال دو داده RAW |
| SUBSTR | برش قسمتی از RAW |
| LENGTH | تعداد بایت در داده RAW |
| REVERSE | معکوس کردن بایتها |
| REPLACE / TRANSLATE / OVERLAY | عملیات جایگزینی |
| COMPARE | مقایسه دو داده RAW |
مثالهای واقعی با UTL_RAW در Oracle
۱. تبدیل متن به RAW و برعکس
DECLARE
v_raw RAW(100);
BEGIN
v_raw := UTL_RAW.CAST_TO_RAW('Oracle');
DBMS_OUTPUT.put_line('RAW: ' || v_raw); -- 4F7261636C65
DBMS_OUTPUT.put_line('Text: ' || UTL_RAW.CAST_TO_VARCHAR2(v_raw));
END;
۲. اتصال دو رشته باینری
DECLARE
r1 RAW(10) := UTL_RAW.CAST_TO_RAW('Ali');
r2 RAW(10) := UTL_RAW.CAST_TO_RAW('Reza');
BEGIN
DBMS_OUTPUT.put_line('Concat: ' || UTL_RAW.CONCAT(r1, r2)); -- AliReza
END;
۳. عملیاتهای بیتبهبیت (AND / OR / XOR)
DECLARE
r1 RAW(1) := HEXTORAW('0F'); -- 00001111
r2 RAW(1) := HEXTORAW('F0'); -- 11110000
BEGIN
DBMS_OUTPUT.put_line('BIT_OR: ' || RAWTOHEX(UTL_RAW.BIT_OR(r1, r2))); -- FF
END;
۴. تبدیل عدد به RAW و برعکس
DECLARE
r RAW(4);
i INTEGER;
BEGIN
r := UTL_RAW.CAST_FROM_BINARY_INTEGER(2024);
i := UTL_RAW.CAST_TO_BINARY_INTEGER(r);
DBMS_OUTPUT.put_line('RAW: ' || RAWTOHEX(r));
DBMS_OUTPUT.put_line('Integer: ' || i);
END;
۵. برش و معکوس کردن داده RAW
DECLARE
raw_val RAW(10) := UTL_RAW.CAST_TO_RAW('Oracle');
BEGIN
DBMS_OUTPUT.put_line('SUBSTR: ' || UTL_RAW.SUBSTR(raw_val, 2, 3));
DBMS_OUTPUT.put_line('REVERSE: ' || UTL_RAW.REVERSE(raw_val));
END;
نکات امنیتی و حرفهای
- امنیت دادهها:
UTL_RAWخودش رمزنگاری امن انجام نمیدهد، اما برای آمادهسازی داده جهت استفاده درDBMS_CRYPTOعالی است. - محدودیت طول: نوع داده
RAWدر PL/SQL فقط تا ۲۰۰۰ بایت قابل استفاده است. - برای دادههای بیشتر از این مقدار، باید از
BLOBاستفاده کنید.
ترکیب UTL_RAW با DBMS_CRYPTO برای رمزنگاری
DECLARE
password_raw RAW(100) := UTL_RAW.CAST_TO_RAW('MySecret123');
hashed RAW(100);
BEGIN
hashed := DBMS_CRYPTO.HASH(password_raw, DBMS_CRYPTO.HASH_SH256);
DBMS_OUTPUT.put_line('SHA256 Hash: ' || RAWTOHEX(hashed));
END;
سوالات متداول درباره پکیج UTL_RAW در اوراکل
UTL_RAW برای تبدیل دادهها به فرمت باینری، انجام عملیات بیتی و پردازش سطح پایین داده استفاده میشه؛ اما رمزنگاری امن انجام نمیده.
در مقابل، DBMS_CRYPTO برای رمزنگاری پیشرفته مثل AES، Triple DES، SHA-256 و MD5 استفاده میشه.
اغلب برای استفاده از DBMS_CRYPTO، اول باید دادهها رو با UTL_RAW آمادهسازی کنی.
از توابع زیر استفاده کن:
UTL_RAW.CAST_TO_RAW(‘Oracle’) — تبدیل به RAW
UTL_RAW.CAST_TO_VARCHAR2(raw_value) — تبدیل به متن قابل خواندن
نتیجه برای 'Oracle' میشه: ۴F7261636C65
در PL/SQL مقدار RAW تا حداکثر ۲۰۰۰ بایت قابل استفاده است.
اگر نیاز به دادههای بزرگتری داری (مثلاً فایل یا تصویر)، باید از نوع داده BLOB استفاده کنی.
میتونی از توابع زیر استفاده کنی که بیتبهبیت روی دادهها کار میکنن:
UTL_RAW.BIT_AND(r1, r2)
UTL_RAW.BIT_OR(r1, r2)
UTL_RAW.BIT_XOR(r1, r2)
مثال:
BIT_OR(HEXTORAW(‘0F’), HEXTORAW(‘F0’)) = FF
نتیجهگیری
پکیج UTL_RAW یکی از ابزارهای قدرتمند و اغلب نادیدهگرفتهشده در Oracle است که میتواند دادهها را به سطح باینری پایین بیاورد و کنترل کامل روی بیتها و بایتها به شما بدهد.
اگر با فایلها، پیامها، رمزنگاری، APIها یا ساختارهای دادهای پیچیده سروکار دارید، تسلط بر UTL_RAW یک مهارت ضروری است.
📢 نظر شما چیست؟ اگر شما هم اطلاعات و تجربه خوبی در استفاده از پکیج UTL_RAW دارید خوشحال میشم در بخش نظرات، تجربه های ارزشمندتان را با ما به اشتراک بگذارید! 🚀
سؤالی درباره این مقاله داری؟
اگر نکتهای در این مقاله برات مبهم بود یا خواستی بیشتر بدونی، همین حالا برام بنویس تا دقیق و صمیمی پاسخت رو بدم — مثل یه گفتوگوی واقعی 💬
برو به صفحه پرسش و پاسخ
دیدگاهتان را بنویسید