หมายเหตุ 1: ตั้งแต่ขั้นตอนที่ 1,3,4,5,6 หากผุ้อ่านเคยทำไว้แล้ว ไม่ว่าทำผ่าน tools หรือ command ให้ข้ามไปขั้นตอนที่ 7 ได้เลยครับ
หมายเหตุ 2 : หากจะใช้คำสั่งใช้ (ต้องใช้สิทธิ SYS นะครับ)
1 2 | CREATE DIRECTORY EXTERNALS AS 'C:\EXTERNALS ' ; -- ชื่อโฟรเดอร์ของเราเอง GRANT READ , WRITE ON DIRECTORY EXTERNALS TO JMEDX; -- JMEDX user ของผู้ใช้ |
ขั้นตอนที่ 1 : สร้างโฟรเดอร์เก็บ text file ชื่อ "EXTERNALS"
ขั้นตอนที่ 2 : สร้างตารางชื่อ "SS_TB_EMPLOYEE"
1 | 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 ครับ
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | 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 ; |
ขั้นตอนที่ 8 : หลังจากดปุ่ม Run แล้วจะมีหน้าต่างใหม่ขึ้นมาให้กดปุ่ม ok เพื่อรันฟังก์ชั้นเขียนข้อมูลลง text file
ขั้นตอนที่ 9 : ให้ดูใน Path ที่เราสร้างว่าไฟล์มาหรือยัง
และเปิดไฟล์ดูด้วยหากมีข้อมเป็นอันเสร็จสิ้นการอ่านข้อมูลจากไฟล์ .txt เขียนลงฐานข้อมูล Oracle ด้วย UTL_FILE Package
0 comments:
Post a Comment