我试图在SQL中建模继承关系。赞助人是教师的父级,这些是他们的定义。
CREATE TABLE Patron(
fname varchar2(25) NOT NULL,
lname varchar2(25) NOT NULL,
id number(10) NOT NULL,
status varchar2(25) NOT NULL,
country_name varchar2(50) NOT NULL,
CONSTRAINT fk_patron_nationality FOREIGN KEY (country_name) REFERENCES Nationality (country_name),
CONSTRAINT pk_patron PRIMARY KEY (id),
CONSTRAINT chk_status CHECK(status IN ('GOOD','BAD'))
);
CREATE TABLE Faculty (
category varchar2(25) NOT NULL,
id number(10) NOT NULL,
CONSTRAINT pk_faculty PRIMARY KEY (id),
CONSTRAINT fk_faculty FOREIGN KEY (id) REFERENCES Patron (id),
CONSTRAINT fk_faculty_category FOREIGN KEY (category) REFERENCES Faculty_Category (category)
);
我使用以下函数调用将数据插入到这些表中。
CREATE or replace FUNCTION insert_faculty (fname in varchar2,lname in varchar2,id in number,
status in varchar2,country_name in varchar2,category in varchar2) return integer
is
pragma autonomous_transaction;
begin
insert into patron values (fname,lname,id,status,country_name);
commit;
insert into faculty values (category,id);
commit;
return 1;
end;
执行上述程序有时会给我以下错误。
ORA-00060: deadlock detected while waiting for resource
ORA-06512: at "SMNATARA.INSERT_FACULTY", line 8
00060. 00000 - "deadlock detected while waiting for resource"
*Cause: Transactions deadlocked one another while waiting for resources.
*Action: Look at the trace file to see the transactions and resources
involved. Retry if necessary.
此错误不会始终发生。这个错误的原因是什么?
答案 0 :(得分:0)
我们遇到了类似的问题。事实证明,PRIMARY KEY
更像是UNIQUE INDEX
的约束,请参阅http://docs.oracle.com/cd/B28359_01/server.111/b28310/indexes003.htm#i1006566。
所以我们自己创建了指数:
CREATE INDEX noDeadlock1 ON Patron (id);
CREATE INDEX noDeadlock2 ON Faculty (id);
并删除了错误消息。