ปัญหาไม่สามารถสร้าง material view ได้ในกรณีที่มีบางฟิวด์เป็นค่า null
โดยที่มันจะ Error :: ORA-01723: zero-length columns are not allowed
1. สร้างวิว v_grad_pattani ให้ได้โครงสร้างเหมือนของ วข.อื่น (v_grad_phuket,v_grad_surat,v_grad_trang) โดยอ้างจากวิวข้อมูลนักศึกษาปัตตานีที่บว.เตรียมไว้ให้ cc_pn_xx@grad แต่ว่าบางฟิวด์ของปัตตานีไม่มีให้ใช้เลยต้องให้เป็นค่า Null ไว้ทำให้ได้โครงสร้างเหมือนของวข อื่นเป็นพอ
CREATE OR REPLACE FORCE VIEW GRAD_II.V_GRAD_PATTANI
AS
SELECT A.STUDENT_ID,
A.CITIZEN_ID,
NULL SEX_CODE,
A.TITLE_CODE TITLE_ID,
A.TITLE_NAME_THAI,
A.TITLE_SHORT_THAI,
A.STUD_NAME_THAI,
A.STUD_SNAME_THAI,
A.STU_ENG_NAME STUD_NAME_ENG,
A.STU_ENG_SNAME STUD_SNAME_ENG,
A.MAJOR_ID,
A.MAJOR_NAME_THAI,
A.MAJOR_NAME_ENG,
A.DEPT_ID,
A.DEPT_NAME_THAI,
A.DEPT_NAME_ENG,
A.FAC_ID,
A.FAC_NAME_THAI,
A.FAC_NAME_ENG,
A.CAMPUS_ID,
A.CAMPUS_NAME_THAI,
A.CAMPUS_NAME_ENG,
A.STUDY_LEVEL_ID,
A.STUDY_LEVEL_NAME,
A.STUDY_TYPE_ID,
A.STUDY_TYPE_NAME,
NULL COURSE_PLAN_ID,
NULL COURSE_OFFER_ID,
NULL EDU_YEAR,
A.DEGREE_ID,
A.COURSE_MAJOR_ID,
A.COURSE_MAJOR_NAME_THAI,
A.COURSE_MAJOR_NAME_ENG,
A.COURSE_CATEGORY_NAME_THAI,
A.COURSE_CATEGORY_NAME_ENG,
A.STUDY_PLAN_ID,
A.STUDY_PLAN_NAME,
A.DEGREE_NAME_THAI,
A.DEGREE_NAME_ENG,
NULL REGULAR_TERM,
NULL REGULAR_YEAR,
NULL EXPAND_YEAR,
A.COURSE_TYPE_ID,
A.COURSE_TYPE_NAME,
A.STUDY_STATUS,
A.STUDY_STATUS_NAME,
A.STILL_STUDENT,
A.NATIONALITY,
A.ADMIT_TERM,
A.ADMIT_YEAR,
A.ADMIT_DATE,
NULL YEAR_STATUS,
A.GRAD_TERM,
A.GRAD_YEAR,
A.GRAD_DATE
FROM cc_pn_xx@grad a;
สร้างวิวนี้สำเร็จ แต่พอไปอ้างตอนสร้าง material view แล้ว oracle ไม่ยอมให้ผ่านกลับฟ้อง error : ORA-01723: zero-length columns are not allowed สาเหตุเนื่องจากพบว่าบางฟิวด์ไม่มี
2. จึงต้องสร้างชื่อฟิวด์หลอก และใส่ null ให้มัน โดยใช้คำสั่ง Cast(Null as ดาต้าไทป์) ตามด้วยชื่อฟิวด์ เพื่อให้ oracle รู้จัก คอลัมน์นี้ได้
CREATE OR REPLACE FORCE VIEW GRAD_II.V_GRAD_PATTANI
AS
SELECT A.STUDENT_ID,
A.CITIZEN_ID,
CAST (NULL AS VARCHAR2 (1)) SEX_CODE,
A.TITLE_CODE TITLE_ID,
A.TITLE_NAME_THAI,
A.TITLE_SHORT_THAI,
A.STUD_NAME_THAI,
A.STUD_SNAME_THAI,
A.STU_ENG_NAME STUD_NAME_ENG,
A.STU_ENG_SNAME STUD_SNAME_ENG,
A.MAJOR_ID,
A.MAJOR_NAME_THAI,
A.MAJOR_NAME_ENG,
A.DEPT_ID,
A.DEPT_NAME_THAI,
A.DEPT_NAME_ENG,
A.FAC_ID,
A.FAC_NAME_THAI,
A.FAC_NAME_ENG,
A.CAMPUS_ID,
A.CAMPUS_NAME_THAI,
A.CAMPUS_NAME_ENG,
A.STUDY_LEVEL_ID,
A.STUDY_LEVEL_NAME,
A.STUDY_TYPE_ID,
A.STUDY_TYPE_NAME,
CAST (NULL AS CHAR (12)) COURSE_PLAN_ID,
CAST (NULL AS CHAR (12)) COURSE_OFFER_ID,
CAST (NULL AS VARCHAR2 (4)) EDU_YEAR,
A.DEGREE_ID,
A.COURSE_MAJOR_ID,
A.COURSE_MAJOR_NAME_THAI,
A.COURSE_MAJOR_NAME_ENG,
A.COURSE_CATEGORY_NAME_THAI,
A.COURSE_CATEGORY_NAME_ENG,
A.STUDY_PLAN_ID,
A.STUDY_PLAN_NAME,
A.DEGREE_NAME_THAI,
A.DEGREE_NAME_ENG,
CAST (NULL AS NUMBER (1)) REGULAR_TERM,
CAST (NULL AS NUMBER (2, 1)) REGULAR_YEAR,
CAST (NULL AS NUMBER (2, 1)) EXPAND_YEAR,
A.COURSE_TYPE_ID,
A.COURSE_TYPE_NAME,
A.STUDY_STATUS,
A.STUDY_STATUS_NAME,
A.STILL_STUDENT,
A.NATIONALITY,
A.ADMIT_TERM,
A.ADMIT_YEAR,
A.ADMIT_DATE,
CAST (NULL AS VARCHAR2 (1)) YEAR_STATUS,
A.GRAD_TERM,
A.GRAD_YEAR,
A.GRAD_DATE
FROM cc_pn_xx@grad a;
2. สร้าง material view : MV_GRAD_STUDENT_PATTANI โดยอ้างวิว V_GRAD_PATTANI คราวนี้ผ่าน
มึนตึบเลย อิอิอิ