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

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

راهنمای کامل پکیج UTL_RAW در Oracle

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

سؤالی درباره این مقاله داری؟

اگر نکته‌ای در این مقاله برات مبهم بود یا خواستی بیشتر بدونی، همین حالا برام بنویس تا دقیق و صمیمی پاسخت رو بدم — مثل یه گفت‌وگوی واقعی 💬

برو به صفحه پرسش و پاسخ

میثم راد

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

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

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