2009-08-23 3 views
0

テーブルの新しいデータを既存の外部キーに割り当てる方法があるのだろうかと思っていました。 たとえば、次のループを使用してcustomerテーブルの列にランダムに生成された数値を割り当てると、Salesテーブルの外部キーとして割り当てられたcust_idと、毎回作成された新しいデータをリンクする方法新しい販売が行われますか?forループ内の既存の外部キーに新しいテーブルのデータを割り当てる

CUSTOMER: 
DECLARE 
     v_cust_id   NUMBER(4) NOT NULL := 0000; 
     v_cust_name  VARCHAR2(30); 
     v_cust_add   VARCHAR2(30); 
     v_phone   VARCHAR2(10); 
BEGIN 
     FOR v IN 1 .. 2000 --Loop 2000 times to create data for the 2000 customers in the database. 
     LOOP 
       v_cust_id := v_cust_id + 1; 
       v_cust_name := dbms_random.string('U',5); 
       v_cust_add := dbms_random.string('A',15); 
       v_phone := dbms_random.value(1000000,9999999); 
         INSERT INTO customer (cust_id, cust_name, cust_add, phone) 
           VALUES (v_cust_id, v_cust_name, v_cust_add, v_phone); 
     END LOOP; 
END; 
/

SALES: 
DECLARE 
     v_sale_id     NUMBER(4) NOT NULL := ; 
     v_sale_price    NUMBER(8,2); 
     v_sale_date    DATE; 
     v_no_of_prods    NUMBER(4); 
     v_prod_id     NUMBER(4); 
     v_desp_id     NUMBER(4); 
     v_cust_id     NUMBER(4); 
BEGIN 
     FOR v IN 1 .. 10 
     LOOP 
       v_sale_id := 
       v_sale_price 
       v_sale_date := 
       v_no_of_products := 
       v_prod_id := 
       v_desp_id := 
       v_cust_id := 
         INSERT INTO sales (sale_id, sale_price, sale_date, no_of_prods, prod_id, desp_id, cust_id) 
           VALUES (v_sale_id, v_sale_price, v_sale_date, v_no_of_prods, v_prod_id, v_desp_id, v_cust_id); 
     END LOOP; 
END; 
\ 
+0

はあなたのコードをフォーマットしてください。私はあなたのコードがこのような混乱した混乱であるとき、あなたは多くの答えを得られないだろうと思う。 –

+0

私は上記の質問を投稿した人でした。 ランダムジェネレータを使用してsalesテーブルにも値を割り当てます。しかし私が疑問に思っていたのは、新しく生成されたデータにcust_idをsalesテーブルに割り当てる方法です。 また、行は何ですか:mod(cust_id、13)= 0;平均? ありがとうございます。 – taksIV

+0

ここで、mod(cust_id、13)= 0はモジュラスを使用して、13番目の顧客レコードごとにランダムな売上レコードを生成します。 – APC

答えて

2

何らかのパフォーマンステストを行うためにテストデータを生成していますか?

最初に2000人の顧客を作りましょう。

(未テスト)

insert into customer 
(cust_id, cust_name, cust_add, phone) 
select 
level l, 
dbms_random.string('U',5), 
dbms_random.string('A',15), 
dbms_random.value(1000000,9999999) 
from dual 
connect by level <= 2000; 

今、あなたは、顧客テーブルから選択することで、売上データをgenereateすることができます

insert into sales 
(sale_id, sale_price, sale_date, no_of_prods, prod_id, desp_id, cust_id) 
select sale_id_sequence.nextval , dbms_random. ...., cust_id 
from customer; 

insert into sales 
(sale_id, sale_price, sale_date, no_of_prods, prod_id, desp_id, cust_id) 
select sale_id_sequence.nextval , dbms_random. ...., cust_id 
from customer 
where mod(cust_id,2) =0; 

insert into sales 
(sale_id, sale_price, sale_date, no_of_prods, prod_id, desp_id, cust_id) 
select sale_id_sequence.nextval , dbms_radom. ...., cust_id 
from customer 
where mod(cust_id,7) =0; 

insert into sales 
(sale_id, sale_price, sale_date, no_of_prods, prod_id, desp_id, cust_id) 
select sale_id_sequence.nextval , dbms_random. ...., cust_id 
from customer 
where mod(cust_id,13) =0; 

commit; 

私は販売のIDを作成するためのシーケンスがあると仮定します。

EDIT1の改善:

create table customer 
(cust_id number(10) 
, cust_name varchar2(50) 
, cust_add varchar2(30) 
, cust_phone varchar2(10) 
); 

create sequence cust_id_seq; 

create table sales 
(sale_id number(10) 
, prod_no number(10) 
, cust_id number(10) 
); 

create sequence sale_id_seq; 

begin 

    insert into customer 
    select cust_id_seq.nextval 
    ,  dbms_random.string('U',5) 
    ,  dbms_random.string('A',15) 
    ,  trunc(dbms_random.value(1000000,9999999)) 
    from dual 
    connect by level < 2000; 

    for i in 1..10 loop 

    insert into sales 
    select sale_id_seq.nextval 
    ,  trunc(dbms_random.value(1,100)) 
    ,  cust_id 
    from customer; 

    insert into sales 
    select sale_id_seq.nextval 
    ,  trunc(dbms_random.value(1,100)) 
    ,  cust_id 
    from customer 
    where mod(cust_id+i,2)=0; 

    insert into sales 
    select sale_id_seq.nextval 
    ,  trunc(dbms_random.value(1,100)) 
    ,  cust_id 
    from customer 
    where mod(cust_id+i,7)=0; 

    end loop; 

end; 
/

commit; 

select count(*) from customer; 

select count(*) from sales; 
関連する問題