ORA-01748:Oracle中只允许使用简单的列名

时间:2017-12-06 16:55:12

标签: sql oracle

我想做什么?

我正在尝试创建两个表,同时我尝试使用外键和主键将它们链接在一起。但是,我成功创建了我的父表(带主键的Student),但无法创建子表(使用外键的Attendence)。

有什么问题?

创建Attendence表时出现以下错误:

第5行的错误:ORA-01748:此处仅允许使用简单的列名称

我的代码:

学生表:

create table Student (

            ST_ROLLNO  NUMBER(6) constraint s_pk primary key,
            ST_NAME    VARCHAR(30) not null,
            ST_ADDRESS  varchar(35) not null
);  

Attendence表:

create table Attendence (

            ST_ROLLNO  NUMBER(6),
            ST_DATE    VARCHAR(30) not null,
            ST_PRESENT_ABSENT  varchar(1) not null,
            constraint f_pk Attendence.ST_ROLLNO foreign key references Student(ST_ROLLNO)
);

2 个答案:

答案 0 :(得分:4)

你的foreign key constraint syntax错了;它应该是:

constraint f_pk foreign key (ST_ROLLNO) references Student(ST_ROLLNO)

你在FK列名前面加上表名,这本身就是错的,但也把它放错了。

create table Student (

            ST_ROLLNO  NUMBER(6) constraint s_pk primary key,
            ST_NAME    VARCHAR(30) not null,
            ST_ADDRESS  varchar(35) not null
);  

Table STUDENT created.

create table Attendence (

            ST_ROLLNO  NUMBER(6),
            ST_DATE    VARCHAR(30) not null,
            ST_PRESENT_ABSENT  varchar(1) not null,
            constraint f_pk foreign key (ST_ROLLNO) references Student(ST_ROLLNO)
);

Table ATTENDENCE created.

答案 1 :(得分:3)

根据oracle文档,

ORA ERR

ORA-01748这里只允许使用简单的列名

  

以下是导致此错误的原因:

     

此SQL语句不允许使用限定列名,例如   username.table.column或table.column。

     

您可以采取的措施来解决此问题:删除资格   从列中重试该操作。

在您的情况下,您在定义约束时尝试引用表名 -

if(response.body() != null) { ... your code... } else { ...your error handling code... } - 错误

它必须包含一个没有表名或模式名称的简单名称。