หมายเหตุ 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
0 comments:
Post a Comment