การเขียนข้อมูลลงไฟล์ .txt จากฐานข้อมูล Oracle ด้วย UTL_FILE

จากก่อนหน้านั้นที่เราเรียนรู้เรื่องการอ่านไฟล ในหัวข้อต่อไปนี้จะพูดเรื่องการเขียนไฟล์ครับ ตั้งแต่ขั้นตอนที่ 1-6 หากผู้อ่านทำมาก่อนหน้านั้นก็ข้ามไปที่ ขั้นตอนที่ 7 ได้เลยครับ และนี่คือตัวอย่างการเขียนไฟล์ด้วย UTL_FILE Package ครับ

หมายเหตุ 1: ตั้งแต่ขั้นตอนที่ 1,3,4,5,6 หากผุ้อ่านเคยทำไว้แล้ว ไม่ว่าทำผ่าน tools หรือ command ให้ข้ามไปขั้นตอนที่ 7 ได้เลยครับ
หมายเหตุ 2 : หากจะใช้คำสั่งใช้ (ต้องใช้สิทธิ SYS นะครับ)
CREATE DIRECTORY EXTERNALS AS'C:\EXTERNALS ';       -- ชื่อโฟรเดอร์ของเราเอง
GRANT READ, WRITE ON DIRECTORY EXTERNALS  TO JMEDX; -- JMEDX user ของผู้ใช้
เสร็จแล้วให้ข้ามไปขั้นตอนที่ 7 ได้เลยครับ

ขั้นตอนที่ 1 : สร้างโฟรเดอร์เก็บ text file ชื่อ "EXTERNALS"



ขั้นตอนที่ 2 : สร้างตารางชื่อ "SS_TB_EMPLOYEE"
CREATE  TABLE EMP12(EMPNO NUMBER(10), ENAME VARCHAR2(15), JOB VARCHAR2(15), MGR NUMBER(4), HIREDATE     DATE, SAL NUMBER(7,2));

    เมื่อสร้างเสร็จจะเป็นดังรูป


    เบื้องต้นในตารางมีข้อมูลอยู่แล้ว ผู้เขียนได้เพิ่มแถวที่ 6 ลงไป



ขั้นตอนที่ 3 : เปิดโปรแกรม SQL Developer ขึ้นมาทำการ connect ด้วย user "SYS" และคลิกขวาที่ "Directories" จากนั้นเลือก Create Directory... เพื่อสร้างชื่อ Directory ให้ระบบรู้จัก

ขั้นตอนที่ 4 : ป้อนชื่อ Directory Name และ Database Server Directory ซึ่งก็คือ path ของโฟรเดอร์ที่เราสร้างไว้ก่อนหน้านั้น จากนั้นก็กด Apply และ OK



ขั้นตอนที่ 5 : ต่อมาเป็นขั้นตอนการกำหนดสิทธิ์การเข้าถึง Directory ใหม่ที่สร้างขึ้นว่า ใครมีสิทธิ์เข้าใช้ได้บ้าง ให้ทำการคลิกขวาที่ Directory ที่เราสร้างจากนั้นเลือก "Grant" เมื่อเลือกแล้วจะมีหน้าต่างใหม่ขึ้นมา

ขั้นตอนที่ 6 : ในหน้าต่างใหม่ ให้เลือก Users/Roles ของเราเอง (1) จากนั้นกำหนดสิทธิ์ให้เลือก Grant All (2) แล้วกดปุ่ม Apply

ขั้นตอนที่ 7 : เมื่อสร้าง Directory และกำหนดสิทธิ์ต่างๆเสร็จแล้วขั้นตอนต่อมาคือการเขียน Procedure ครับ
create or replace PROCEDURE write_file
IS
  -- ประกาศตัวแปรสำหรับจัดการไฟล์
  file1 utl_file.file_type;
  CURSOR empc
  IS
    SELECT * FROM SS_TB_EMPLOYEE;
  employ empc%rowtype;
  stmt VARCHAR2(300);
  head VARCHAR2(300);
  line VARCHAR2(300);
BEGIN
  -- ใช้ UTL_FILE เปิดไฟล์ โดยใช้ 'EXTERNALS' เป็นชื่อ directory
  -- ตามด้วยชื่อไฟล์ 'emp_table.txt' และโหมดการเขียน 'W' ('Write')
file1 := utl_file.fopen('EXTERNALS','emp_table.txt','W');
  utl_file.put_line(file1,'Report Generated ON: ' || sysdate);
  utl_file.new_line(file1);
  head:='EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO';
  UTL_FILE.PUTF(file1, head);
  utl_file.new_line(file1);
  line:= '==================================================================================================';
  UTL_FILE.PUTF(file1, line);
  utl_file.new_line(file1);
  FOR employ IN empc
  LOOP
    stmt := rpad(employ.empno,10,' ') || rpad(employ.ename,20,' ') || rpad(employ.job,20,' ') || rpad(NVL(TO_CHAR(employ.mgr),' '),30,' ') || rpad(employ.hiredate,30,' ') || rpad(employ.sal,30,' ');
    utl_file.PUTF(file1, stmt);
    utl_file.new_line(file1);
  END LOOP;
  utl_file.fclose(file1);
END;
จากนั้น ทำการ run script (1) เราก็จะเห็นว่า Procedure ถูกสร้างขึ้นใหม่ ให้คลิกขวาที่ Procedure ""WRITE_FILE" แล้วกด Run หรือเปิด Procedure ขึ้นมา แล้วกด Run (1) ก็ได้ครับ




ขั้นตอนที่ 8 :  หลังจากดปุ่ม Run แล้วจะมีหน้าต่างใหม่ขึ้นมาให้กดปุ่ม ok เพื่อรันฟังก์ชั้นเขียนข้อมูลลง text file


ขั้นตอนที่ 9 : ให้ดูใน Path ที่เราสร้างว่าไฟล์มาหรือยัง

 และเปิดไฟล์ดูด้วยหากมีข้อมเป็นอันเสร็จสิ้นการอ่านข้อมูลจากไฟล์ .txt  เขียนลงฐานข้อมูล Oracle ด้วย UTL_FILE Package



About Nop

This is a short description in the author block about the author. You edit it by entering text in the "Biographical Info" field in the user admin panel.
    Blogger Comment

0 comments:

Post a Comment