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

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

آموزش کامل پکیج UTL_FILE در Oracle PL/SQL

مقدمه : UTL_FILE چیست و چه کاربردی دارد؟

اگر در حال کار با Oracle هستید و نیاز دارید با فایل‌های متنی روی سرور تعامل داشته باشید، پکیج UTL_FILE یکی از ابزارهای کلیدی PL/SQL است که باید به خوبی بشناسید.

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

در این مقاله آموزش Oracle، قراره خیلی ساده و کاربردی با پکیج UTL_FILE آشنا بشیم و ببینیم چطور میشه با استفاده از اون، فایل‌خوانی و فایل‌نویسی رو در محیط Oracle انجام داد.

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

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

شروع کار با UTL_FILE در Oracle

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

بنابراین باید مسیر مجازی تعریف کنید که Oracle بتونه فایل‌هارو اونجا بخونه یا بنویسه.

تعریف مسیر دسترسی به فایل در Oracle

بهترین روش برای این کار استفاده از دستور زیره:

				
					CREATE OR REPLACE DIRECTORY my_dir AS '/u01/app/files';
GRANT READ, WRITE ON DIRECTORY my_dir TO your_user;

				
			

توجه: این مسیر باید واقعی و روی همان سیستمی باشه که دیتابیس Oracle روی اون اجرا میشه.

توابع و پروسیجرهای مهم UTL_FILE

۱. FOPEN – باز کردن فایل

				
					f := UTL_FILE.FOPEN('MY_DIR', 'report.txt', 'W');

				
			

حالت‌ها:

  • 'R': خواندن فایل
  • 'W': نوشتن و پاک کردن محتوای قبلی
  • 'A': اضافه کردن به انتهای فایل

۲. PUT_LINE – نوشتن یک خط در فایل

				
					UTL_FILE.PUT_LINE(f, 'in ye nemoone report ast.');

				
			

۳. PUT و NEW_LINE – نوشتن بدون رفتن به خط جدید

				
					UTL_FILE.PUT(f, 'shomare personeli:');
UTL_FILE.PUT(f, 1234);
UTL_FILE.NEW_LINE(f);

				
			

۴. GET_LINE – خواندن یک خط از فایل

				
					DECLARE
  f   UTL_FILE.FILE_TYPE;
  txt VARCHAR2(4000);
BEGIN
  f := UTL_FILE.FOPEN('MY_DIR', 'data.txt', 'R');
  LOOP
    BEGIN
      UTL_FILE.GET_LINE(f, txt);
      DBMS_OUTPUT.PUT_LINE(txt);
    EXCEPTION
      WHEN NO_DATA_FOUND THEN
        EXIT;
    END;
  END LOOP;
  UTL_FILE.FCLOSE(f);
END;

				
			

۵. IS_OPEN – بررسی باز بودن فایل

				
					IF UTL_FILE.IS_OPEN(f) THEN
  UTL_FILE.FCLOSE(f);
END IF;

				
			

۶. FCLOSE و FCLOSE_ALL – بستن فایل‌ها

				
					UTL_FILE.FCLOSE(f);
UTL_FILE.FCLOSE_ALL;

				
			

مثال کاربردی: گرفتن خروجی از جدول به فایل متنی

				
					DECLARE
  f   UTL_FILE.FILE_TYPE;
  CURSOR emp_cur IS
    SELECT empno, ename, job FROM emp;
  v_line VARCHAR2(1000);
BEGIN
  f := UTL_FILE.FOPEN('MY_DIR', 'employees.txt', 'W');
  FOR rec IN emp_cur LOOP
    v_line := rec.empno || ',' || rec.ename || ',' || rec.job;
    UTL_FILE.PUT_LINE(f, v_line);
  END LOOP;
  UTL_FILE.FCLOSE(f);
END;

				
			

خطاهای رایج در کار با UTL_FILE

در هنگام کار با این پکیج ممکنه به خطاهای زیر برخورد کنید:

کد خطا توضیح
ORA-29280 مسیر فایل نامعتبر یا بدون دسترسی
ORA-29283 فایل پیدا نشد
ORA-06512 خطا در اجرای PL/SQL

نکات امنیتی و پیشرفته در مورد UTL_FILE

  • همیشه به جای UTL_FILE_DIR از CREATE DIRECTORY استفاده کنید.
  • فایل‌هایی که می‌خواید بخونید یا بنویسید باید در سروری باشن که دیتابیس Oracle روش نصبه.
  • این پکیج فقط برای فایل‌های متنی مناسبه. برای فایل‌های باینری، از BFILE یا DBMS_LOB استفاده کنید.

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

خطای ORA-29280: invalid directory path معمولاً به دلیل یکی از موارد زیر رخ می‌دهد:

  • مسیر تعریف‌شده با CREATE DIRECTORY وجود ندارد یا اشتباه نوشته شده
  • کاربر فعلی مجوز READ یا WRITE روی مسیر دایرکتوری ندارد
  • فایل‌سیستم اجازه دسترسی به Oracle نمی‌دهد (مثلاً به دلیل permissionهای OS)

بله. UTL_FILE می‌تواند با فایل‌های CSV به خوبی کار کند چون اساساً فایل‌های متنی هستند. کافی‌ست داده‌ها را با جداکننده (مثلاً کاما) از هم جدا کنید:

UTL_FILE.PUT_LINE(f, empno || ‘,’ || ename || ‘,’ || sal);

و هنگام خواندن از GET_LINE استفاده کرده و داده‌ها را با SUBSTR یا REGEXP_SUBSTR جدا کنید.

خیر. UTL_FILE فقط روی سروری کار می‌کند که دیتابیس Oracle روی آن نصب است.

اگر فایل روی کامپیوتر کلاینت است، باید ابتدا فایل را به سرور منتقل کنید یا از ابزارهایی مثل SQL*Loader یا Oracle External Table استفاده نمایید.

برای امنیت بیشتر، Oracle فقط به مسیرهایی اجازه دسترسی می‌دهد که از قبل تعریف شده باشند. بهترین روش برای مشخص کردن مسیر مجاز استفاده از دستور CREATE DIRECTORY است:

CREATE OR REPLACE DIRECTORY my_dir AS ‘/u01/app/files’;
GRANT READ, WRITE ON DIRECTORY my_dir TO your_user;

نتیجه‌گیری : چرا باید UTL_FILE رو بلد باشیم؟

یاد گرفتن پکیج UTL_FILE یکی از مهارت‌های ضروری برای هر توسعه‌دهنده PL/SQL هست.

این ابزار می‌تونه کارهای زیادی رو برای شما ساده‌تر کنه؛ از لاگ‌برداری دقیق تا پردازش فایل‌های CSV و تولید گزارش‌های خروجی.

اگه دوست دارید یه پروژه واقعی مثل خوندن فایل ورودی و ذخیره توی جدول بنویسم، یا حتی پردازش فایل‌های گزارش مالی، فقط کافیه بگید.

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

میثم راد

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

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

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