2009-11-03 1 views
0

У меня есть два объекта, Клиент и Заказ, оба из которых я создал типы для. Объявления типа SQL:Как я могу использовать REF для ссылки на объекты строк?

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

Любая помощь будет принята с благодарностью.

ответ

0

Что вы подразумеваете под 'когда я проверяю данные'?

Это работает на моей машине:

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';