Oracle Troubleshoot : ORA-01723: zero-length columns are not allowed error code when create mview
Oracle Troubleshoot : ORA-01723: zero-length columns are not allowed error code when create mview
อรุณสวัสดิ์ทุกคนครับ ช่วงนี้อากาศสดใสหลังฝนตก มลพิษลดลง ทำให้สุขภาพเราดีขึ้นครับ แต่เรื่องหน้าที่การงานเราก็ต้องสู้กันต่อไปครับ
วันนี้มีน้องฝากบทความมาเป็นปัญหาที่เกิดขึ้นในขณะที่เราสร้าง Oracle Materialized View ซึ่งเป็น Objects อีกชนิดนึงของ Oracle ที่มีประโยชน์มาก ด้วยคุณสมบัติที่เป็นเสมือน Table คือมีเนื้อข้อมูลจริงไม่ใช่ View ที่ต้องไป Join จากตารางต้นทาง ซึ่งหากการ Join มีความซับซ้อนและไม่มีการปรับจูน SQL Statement หรือใส่ Indexes ไว้ที่ตารางต้นทางก็จะทำให้การ Query ช้าไปด้วย และถ้ามีการ Query View ที่ช้าด้วยปริมาณมากๆ resources บนเครื่องก็จะลดลงอย่างรวดเร็ว ส่งผลให้ประสิทธิภาพการให้บริการของระบบฐานข้อมูลด้อยลงไป
ดังนั้นวิธีการนึงที่เราใช้กันคือ สร้าง Materialized View ที่ไปดึงข้อมูลจากการ Join หลายตารางมาทำเป็นเสมือน Table แต่มีข้อดีกว่า Table ตรงที่ สามารถทำ Data Refresh ทำให้ไม่ต้อง Drop / Recreate Table ใหม่ครับ
คราวนี้ถ้าเราสร้าง Materialized View or MView แล้วขึ้น oracle error code :
ORA-01723: zero-length columns are not allowed
นั่นเพราะว่ามีฟิลด์ใดฟิลด์หนึ่งที่ไม่มีขนาด (zero-lenght) หรือเป็น null นั่นเอง oracle จึงไม่ยอมให้สร้าง ซึ่งมีทางแก้โดยเราเรียกใช้ฟังก์ชัน CAST() ซึ่งเป็นฟังก์ชันสำหรับการ Convert DataType (ในที่นี้คงไม่ลงรายละเอียดของฟังก์ชัน แต่จะยกยอดไว้คราวหน้าจะมาอธิบายให้ฟังครับ) โดยมีวิธีการเรียกใช้แก้ปัญหาดังนี้
CAST( NULL AS <Define Data Type>) |
ตัวอย่างการแก้ไขปัญหาตอนสร้าง mview
SQL> CREATE MATERIALIZED VIEW TEST.MV_TEST_TABLE 2 REFRESH FORCE 3 WITH ROWID 4 AS 5 SELECT ID,FNAME,” AS NULL_COLUMN 6 FROM TEST.TEST_TABLE; FROM TEST.TEST_TABLE * ERROR at line 6: ORA-01723: zero-length columns are not allowed |
>> Recreate use cast function |
SQL> CREATE MATERIALIZED VIEW TEST.MV_TEST_TABLE 2 REFRESH FORCE 3 WITH ROWID 4 AS 5 SELECT ID,FNAME,CAST(NULL AS CHAR(1)) AS NULL_COLUMN 6 FROM TEST.TEST_TABLE; Materialized view created. |
ผู้สนับสนุนบทความ วลัญช์ ครองสัตย์