Oracle创建表报错ORA-02263:需指定列数据类型排查求助
ORA-02263错误解决:创建Oracle表时的语法问题
你的SQL语句触发ORA-02263错误的核心原因是:ID列使用了Oracle不支持的AUTO_INCREMENT关键字——这是MySQL的自增语法,Oracle解析时会将其误认为是一个未指定数据类型的新列,因此抛出“需要指定列数据类型”的错误。
修正方案(分版本)
Oracle 12c及以上版本(推荐)
使用Oracle原生的GENERATED ALWAYS AS IDENTITY语法实现自增,修正后的完整SQL如下:
CREATE TABLE IUAPORTAL.IUA_PROVIDER_ENROLLMENT ( ID NUMBER GENERATED ALWAYS AS IDENTITY NOT NULL, ORG_NAME VARCHAR2(55 BYTE) NOT NULL, ORG_TYPE_ID VARCHAR2(2 BYTE), CLINICAL_SITES VARCHAR2(2 BYTE), ADDITIONAL_SITES VARCHAR2(2 BYTE), CHIRP_SUBMISSION VARCHAR2(2 BYTE), VFS_PROVIDER VARCHAR2(2 BYTE), VFS_PIN VARCHAR2(20 BYTE), SITE_NAME VARCHAR2(100 BYTE), SITE_CONTACT VARCHAR2(100 BYTE), PHONE_NUMBER VARCHAR2(20 BYTE), COUNTY VARCHAR2(20 BYTE), FAX_NUMBER VARCHAR2(20 BYTE), EMAIL VARCHAR2(100 BYTE), ELECTRONIC_SIGNATURE CLOB, SIGNATURE_DT DATE, NAME_TITLE VARCHAR2(100 BYTE), PRIMARY KEY (ID) );
Oracle 11g及更早版本
需手动创建序列和触发器实现自增:
- 先创建序列:
CREATE SEQUENCE IUAPORTAL.SEQ_IUA_PROVIDER_ENROLLMENT_ID START WITH 1 INCREMENT BY 1 NOCACHE NOCYCLE;
- 再创建触发器:
CREATE OR REPLACE TRIGGER IUAPORTAL.TRG_IUA_PROVIDER_ENROLLMENT_ID BEFORE INSERT ON IUAPORTAL.IUA_PROVIDER_ENROLLMENT FOR EACH ROW BEGIN SELECT SEQ_IUA_PROVIDER_ENROLLMENT_ID.NEXTVAL INTO :NEW.ID FROM DUAL; END; /
- 创建表的SQL中,ID列仅保留
NUMBER NOT NULL,移除AUTO_INCREMENT:
CREATE TABLE IUAPORTAL.IUA_PROVIDER_ENROLLMENT ( ID NUMBER NOT NULL, ORG_NAME VARCHAR2(55 BYTE) NOT NULL, ORG_TYPE_ID VARCHAR2(2 BYTE), CLINICAL_SITES VARCHAR2(2 BYTE), ADDITIONAL_SITES VARCHAR2(2 BYTE), CHIRP_SUBMISSION VARCHAR2(2 BYTE), VFS_PROVIDER VARCHAR2(2 BYTE), VFS_PIN VARCHAR2(20 BYTE), SITE_NAME VARCHAR2(100 BYTE), SITE_CONTACT VARCHAR2(100 BYTE), PHONE_NUMBER VARCHAR2(20 BYTE), COUNTY VARCHAR2(20 BYTE), FAX_NUMBER VARCHAR2(20 BYTE), EMAIL VARCHAR2(100 BYTE), ELECTRONIC_SIGNATURE CLOB, SIGNATURE_DT DATE, NAME_TITLE VARCHAR2(100 BYTE), PRIMARY KEY (ID) );
内容的提问来源于stack exchange,提问作者Krish
相关产品推荐
相关产品推荐

