ホーム>source

次の表にデータを挿入しようとすると。

create table Policies of policy_t(
pid primary key,
inscar references Cars
)nested table claims store as  claims_ntable;

次のクエリを使用して、

insert into policies
        select policy_t ('PLC1234','12 Mar 2017','12 Mar 2018',REF(C),175000,claim_t('CLAIM1234567','12 Feb 2017','56000',REF(T)))
        from cars C,customer T
        where C.regno = 'CAB3233' and T.cid = '123ABC'

そして、私は次のエラーが発生します

Error starting at line : 1 in command -
insert into policies
select policy_t ('PLC1234','12 Mar 2017','12 Mar    2018',REF(C),175000,claim_t('CLAIM1234567','12 Feb 2017','56000',REF(T)))
from cars C,customer T
where C.regno = 'CAB3233' and T.cid = '123ABC'
Error at Command Line : 3 Column : 25
Error report -
SQL Error: ORA-00942: table or view does not exist
00942. 00000 -  "table or view does not exist"
*Cause:    
*Action:

このテーブルにデータを挿入する方法は?

他の関連するオブジェクトタイプとテーブル、

顧客オブジェクトタイプ

create type Customer_t as object(
cid char(6),
cusname varchar(15),
birthdate date,
phone char(10),
address varchar(50)
);

顧客テーブル

create table Customers of customer_t(
cid primary key
);

クレームオブジェクトタイプ

create type claim_t as object(
claimno char(12),
cdate date,
amount number(8,2),
claimant ref customer_t
);

ネストしたテーブルを要求する

create type Claim_ntab is table of claim_t;

カーオブジェクトタイプ

create type Car_t as object(
regno char(9),
make varchar(12),
model varchar(10),
mdate date,
owner ref customer_t,
value number(8,2)
);

車のテーブル

create table Cars of car_t(
regno primary key,
owner references Customers
);

ポリシーオブジェクトタイプ

create type policy_t as object(
pid char(7),      
sdate date,
edate date,
inscar ref car_t,
premium number(6,2),
claims claim_ntab
)

ポリシー表

create table Policies of policy_t(
pid primary key,
inscar references Cars
)nested table claims store as  claims_ntable;

あなたの答え
  • 解決した方法 # 1

    テーブル名( customer / customers )、次の問題は、 customers.claims  は claim_ntab です  しかし、あなたは claim_t を挿入しようとしています  それに。これを試して:

    insert into policies
    select policy_t
           ( 'PLC1234'
           , date '2017-03-12'
           , date '2018-03-12'
           , ref(ca)
           , 175000
           , claim_ntab(claim_t
             ( 'CLAIM1234567'
             , date '2017-02-12'
             , '56000'
             , ref(cu) ) )
             )
    from   cars ca
           join customers cu
                on ref(cu) = ca.owner
    where  ca.regno = 'CAB3233'
    and    cu.cid = '123ABC'
    
    

    編集: where を変更しました  オブジェクト参照を使用してANSIスタイルに結合する句。正直に言うと、私は以前にその構文を使用したことがないので、持っている人はほとんどいないと思うので、テストが必要です。

  • 解決した方法 # 2

    テーブルに Customers という名前を付けました 、複数に注意してください。

    だから変更

    from cars C,customer T
    
    

    from cars C,customers T
    
    

    またはさらに良いことに、あなたがとにかくいる間、明示的な JOIN を使用して書き換えます  構文。

  • 解決した方法 # 3

    INSERT INTO _table1_ (_field1_, _field2_, _field3_)  値ではなくフィールドの名前 SELECT _field1_, _field2_, _field3_ FROM _table2_ WHERE ... ;

    INSERT INTO _table1_ (_field1_, _field2_, _field3_) VALUES ('some text', 'some text', 'some text');  いくつかの値を追加する場合

関連記事

  • 前へ java - JPAクエリ:サブクエリをグループ化条件に結合する
  • 次へ javascript - 強調表示された選択CSSのノックアウト移動/スライド