2011-07-27 3 views
0

계정, 클라이언트가 두 개의 테이블이 cl_ac 관계와 관련되어 있다는 관계가 있습니다. 계정에는 ac_id가 있고 클라이언트에는 기본 키로 c_id가 있으며이 두 키는 외래 키로 cl_ac 테이블에 있습니다. 계정 (ac_id) 및 클라이언트 (c_id) 기본 키에 대한 트리거가 있도록 두 테이블에 남아있는 값만 삽입하고 기본 키를 각 레코드에 대해 자체를 증가시킬 필요가 있도록. 이제 계정과 클라이언트에 값을 삽입 할 때 자동으로 "cl_ac"테이블에 값을 삽입하는 트리거가 필요합니다.Oracle에서 트리거 10g

또는 외래 키 제약 조건을 위반하지 않는 또 다른 옵션입니다.

많은 옵션을 시도했지만 cl_ac 테이블에 한 번에 2 개의 값 (c_id 및 ac_id)을 삽입 할 수 없었습니다. 제발 누군가 도와주세요. 더 나은 이해를 위해 이미지를 삽입 할 수 있다면 좋았을 것입니다. 제 질문을 이해할 수있는 단어로 넣어 봤습니다.

감사합니다.

+3

반대로 아래 pseduo 코드와 같은 절차에 물건을 포장 할 수 있습니다 ? 그렇게하면 cl_ac 테이블을 중복되게 만듭니다. –

답변

1

아마도 트리거가 아닌 삽입하려는 값을 모두 얻으려면 RETURNING을 사용해야합니까?

INSERT INTO account (ac_id,....) VALUES(seq_ac_id.NEXTVAL,....) RETURNING ac_id INTO return_account_id; 
INSERT INTO client (c_id,....) VALUES(seq_c_id.NEXTVAL,....) RETURNING c_id INTO return_client_id; 
INSERT INTO relationship (ac_id,c_id) values(return_account_id, return_client_id); 
COMMIT; 
1

트리거는 어떤 계정을 어떤 클라이언트와 연관시키는 지 어떻게 알 수 있습니까?

계정/클라이언트 레코드를 생성하는 코드에서 관계 레코드를 삽입하는 것이 좋습니다. 그것이 필요한 정보가있는 곳입니다.

0

당신은 종류의

CREATE OR REPLACE PACKAGE BODY cli_acc IS 
    TYPE tab_cli IS TABLE OF client%ROWTYPE; 
    TYPE tab_acc IS TABLE OF account%ROWTYPE; 
    PROCEDURE ins_cli_acc (i_tab_cli tab_cli, i_tab_acc tab_acc) IS 
    BEGIN 
    --insert all of i_tab_cli into CLIENT 
    --insert all of i_tab_acc into ACCOUNT 
    FOR i IN i_tab_cli.FIRST .. i_tab_cli.LAST LOOP 
     FOR j IN i_tab_acc.FIRST .. i_tab_acc.LAST LOOP 
     INSERT INTO cli_acc (cli_id, acc_id) 
     VALUES (i_tab_cli(i).cli_id, i_tab_acc(j).acc_id); 
     END LOOP; 
    END LOOP; 
    END ins_cli_acc; 
END cli_acc; 
당신이 새로운 클라이언트가 삽입 될 때마다 모든 계정과 연결하려는 뜻