0

列 (タイプ) に特定の値 (S) を持つ行 (レコード) を検索し、同じテーブルのその行に基づいて複数の行 (たとえば 2) を挿入したいと考えています。

たとえば、以下のタブ t1 では、タイプ「S」の行ごとに、同じ ID と価格、新しいカウンター値で 2 行を挿入します (このフィールドに特定の要件はありませんが、同じ ID を持つレコードのカウンターはタイプは「B」になります。

以下のテーブルの最初のレコード (1,1200,S,200) に基づいて 2 つの行を挿入する場合、新しいレコードのカウンター値は、既にテーブルにある ID=1 のレコードのカウンター値 (1200) とは異なる必要があることを意味します。および 1201)。したがって、最初のテーブルにはタイプ「S」の 3 つのレコードがあり、最終テーブルでは、これらのレコードのそれぞれに対して、タイプ「B」の 2 つの新しいレコードと新しいカウンター値が挿入されます。

IDカウンタータイプ 料金
------------------------
1 1200 S 200
1 1201 T400
2 1200T500
3 1546 S 100 
3 1547 S 70
4 2607 M 250

出力テーブル t1 は次のようになります。

IDカウンタータイプ 料金
------------------------
1 1200 S 200
1 1202 B 200 
1 1203 B 200
1 1201 T400
2 1200T500
3 1546 S100
3 1548 B 100 
3 1549 B 100
3 1547 S700
3 1550 B 700 
3 1552 B 700
4 2607 M 250
4

3 に答える 3

0

シーケンスの作成 my_SEQ

1ずつ増加

1から始める

MINVALUE 1

MAXVALUE 999999999

ノサイクル

ノカシェ

NOORDER;

create table MY_TABLE1 ( ID NUMBER, counter number(20), type varchar2(30), price number )

my_table1 (id,counter,type,price) 値 (my_SEQ.nextval,1200,'S',200) に挿入します。

my_table1 (id,counter,type,price) 値 (my_SEQ.nextval,1300,'B',311) に挿入します。

my_table1 (id,counter,type,price) 値 (my_SEQ.nextval,200,'S',110) に挿入します。

my_table1 (id、counter、type、price) 値 (my_SEQ.nextval,299,'B',329) に挿入します。

select * from my_table1

    ID    COUNTER TYPE                                PRICE

    62       1200 S                                     200
    63       1300 B                                     311
    64        200 S                                     110
    65        299 B                                     329

宣言する

カーソル c1 は select * from My_table1 where type='B'; です。

始める

for rec IN c1

ループ

my_table1 に挿入 (id、カウンター、タイプ、価格)

値 (my_SEQ.nextval,rec.counter+1,'Z',rec.price);

ループを終了します。

終わり;

select * from my_table1

    ID    COUNTER TYPE                                PRICE

    63       1300 B                                     311
    65        299 B                                     329
    64        200 S                                     110
    62       1200 S                                     200
    66       1301 Z                                     311
    67        300 Z                                     329

6 行が選択されました。

したがって、カーソルでタイプが ='B' であるすべての行を選択し、値を少し変更して挿入し直します。お役に立てれば。シーケンスを使用できませんでしたが、rec.id+1 を追加しました

于 2013-10-25T11:14:00.457 に答える