2016-07-20 8 views
1

SQLオブジェクトを使用する場合、参照フィールドに一意/外部キーを設定できますか?たとえば、次の表があるとします。Oracle SQLオブジェクト - 参照の一意/外部キー

create table MY_TABLE (
    SOME_REFERENCE ref MY_TYPE 
); 

参照に一意のキーを設定できますか?

alter table MY_TABLE modify (constraint ABC unique(SOME_REFERENCE)) 

ORA-02329: column of datatype REF cannot be unique or a primary keyを与える)

それが参照フィールドにユニーク/外部キーのようなものをachiveすることは可能です

答えて

1

あります(多分回避策を使用して?):このような何か回避策がありますが、それは難しいです。

create type my_type as object 
(id number, v varchar2(20)); 

create table my_type_table of my_type; 

insert into my_type_table values(1,'a'); 

create table MY_TABLE (
    SOME_REFERENCE ref MY_TYPE 
); 

create or replace function test_func(p_ref ref MY_TYPE) return number DETERMINISTIC 
is 
    v_typ MY_TYPE; 
begin 
    SELECT DEREF(p_ref) INTO v_typ FROM DUAL; 
    return v_typ.id; 
end; 

CREATE UNIQUE INDEX fn_idx_un ON MY_TABLE (test_func(SOME_REFERENCE)); 

テストします。

insert into my_type_table values(1,'a'); 
insert into MY_TABLE SELECT REF(e) FROM my_type_table e; (*1) 
insert into MY_TABLE SELECT REF(e) FROM my_type_table e; (*2) 

* 1 - 正常に動作し、行が挿入されます。

* 2 - 実行が発生します。 ORA-00001:unique constraint (FN_IDX_UN) violated

+0

ありがとう、それは私が探しているものです!外部キーに似た何かを達成する方法はありますか? – tobspr