สร้าง MV ให้ได้แม้บางฟิวด์เป็นค่าNULL


ORA-01723: zero-length columns are not allowed

ปัญหาไม่สามารถสร้าง 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 คราวนี้ผ่าน

หมายเลขบันทึก: 456113เขียนเมื่อ 25 สิงหาคม 2011 15:21 น. ()แก้ไขเมื่อ 16 มิถุนายน 2012 14:56 น. ()สัญญาอนุญาต: ครีเอทีฟคอมมอนส์แบบ แสดงที่มา-ไม่ใช้เพื่อการค้า-อนุญาตแบบเดียวกันจำนวนที่อ่านจำนวนที่อ่าน:


ความเห็น (1)
พบปัญหาการใช้งานกรุณาแจ้ง LINE ID @gotoknow
ClassStart
ระบบจัดการการเรียนการสอนผ่านอินเทอร์เน็ต
ทั้งเว็บทั้งแอปใช้งานฟรี
ClassStart Books
โครงการหนังสือจากคลาสสตาร์ท