Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何使用REF引用行对象?_Sql_Oracle_Oracle10g_Ora 00932 - Fatal编程技术网

Sql 如何使用REF引用行对象?

Sql 如何使用REF引用行对象?,sql,oracle,oracle10g,ora-00932,Sql,Oracle,Oracle10g,Ora 00932,我有两个实体,Customer和Order,我为它们创建了类型。SQL类型声明包括: CREATE OR REPLACE TYPE "CUSTOMERTYPE" AS OBJECT ( customerId CHAR(6), name VARCHAR2(50), address VARCHAR2(255), telephone CHAR(11) ); CREATE OR REPLACE TYPE "ORDERTYPE" AS OBJECT ( customer REF CustomerTy

我有两个实体,Customer和Order,我为它们创建了类型。SQL类型声明包括:

CREATE OR REPLACE TYPE  "CUSTOMERTYPE" AS OBJECT (
customerId CHAR(6),
name VARCHAR2(50),
address VARCHAR2(255),
telephone CHAR(11)
);

CREATE OR REPLACE TYPE  "ORDERTYPE" AS OBJECT (
customer REF CustomerType,
orderId CHAR(10),
orderDate DATE,
totalCost FLOAT
);
其想法是客户可以下1..*个订单。订单由1..1个客户下

我还创建了CustomerTable和OrderTable表,如下所示:

CREATE TABLE  "CUSTOMERTABLE" OF  "CUSTOMERTYPE";
CREATE TABLE  "ORDERTABLE" OF  "ORDERTYPE";
CustomerTable中有一个customerId为“123456”的条目。当我执行以下操作时:

INSERT INTO OrderTable
  SELECT OrderType (REF(c), '1234567890', '02-Nov-2009', 99)
    FROM CustomerTable c
    WHERE c.customerId = '123456';
Oracle报告该行已插入。但是,当我检查数据时,我发现错误:

ORA-00932:不一致的数据类型:预期数量获得了REF MILKPLUSVELLOCET.CUSTOMERTYPE


非常感谢您的帮助。

您所说的“当我检查数据时”是什么意思

这在我的机器上工作:

declare
  cust customertype;
begin
  cust := new customertype('111111', 'Mr. Burns', '42 Mil,ky Way', '+41 75 000');
  insert into customertable values cust;
end;
/


INSERT INTO OrderTable
  SELECT OrderType (REF(c), '1234567890', '02-Nov-2009', 99)
      FROM CustomerTable c
          WHERE c.customerId = '111111';

--

select * from ordertable;

select o.customer.name from ordertable o where o.orderid = '1234567890';