如何在Oracle中使用带有自定义类型的REFERENCES语句?

时间:2014-11-20 09:50:15

标签: sql oracle oracle11g

我有这段代码:

Create TYPE Umpire As OBJECT(UmpireID INTEGER PRIMARY KEY,
UmpireName VARCHAR2(50),UmpireAddress VARCHAR2(50),  UmpireContact VARCHAR2(50),
MEMBER FUNCTION get_results RETURN VARCHAR2,
MEMBER PROCEDURE set_results
(UmpireID INTEGER,UmpireName VARCHAR2(50),UmpireAddress VARCHAR2(50),UmpireContact VARCHAR2(50));

Create table Certificate(UmpireId INTEGER,CertificateUpdated CHAR, FOREIGN KEY (UmpireId) REFERENCES Umpire(UmpireId));

我有这样的错误:“架构创建失败:ORA-00942:表或视图不存在”

如何在Oracle中使用带有自定义类型的REFERENCES语句?

1 个答案:

答案 0 :(得分:0)

出于参考目的,您需要使用以下语法。

CREATE TABLE parent (
id INT NOT NULL,
PRIMARY KEY (id)
) ENGINE=INNODB;

CREATE TABLE child (
id INT, 
parent_id INT,
INDEX par_ind (parent_id),
FOREIGN KEY (parent_id) 
    REFERENCES parent(id)
    ON DELETE CASCADE
) ENGINE=INNODB;

此外,如果尝试访问另一个模式中的表或视图,请确保引用了正确的模式,并授予对该对象的访问权。

您是否尝试同时运行同一数据库用户的select和insert?你能告诉我们从Connect到断开的SQLPLUS中的会话吗?你能说明函数的定义吗?

如果您在Schema A中创建了一个表,而在Schema B中创建了该函数,那么您应该查看Oracle的Invoker / Definer Rights概念,以了解可能导致该问题的原因。

http://download.oracle.com/docs/cd/B19306_01/appdev.102/b14261/subprograms.htm#LNPLS00809

我希望这会有所帮助。