1

CustomerとOrderの2つのエンティティがあり、どちらもタイプを作成しました。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:データ型に一貫性がありません:期待されるNUMBERがREFMILKPLUSVELLOCET.CUSTOMERTYPEを取得しました

どんな助けでも大歓迎です。

4

1 に答える 1

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';
于 2009-11-03T07:22:24.333 に答える