私は多くを検索して、まだ私の質問に対する答えを見つけることができませんでした。
したがって、私は別のテーブルにたくさんのデータ(何百万行も)を生成しなければなりません。このスクリプトは速くでなければなりません。SQL、ORACLE:異なる値の列の値を更新します。
- 所有者 idが10000から開始し、1台で
- 車 ID(配列と)によって増分: 現在、これらのID列がある、のは約3特定のテーブルを語らせます10000000から始まり、1ずつ増加します(シーケンス付き)。 所有権と呼ばれる第3のテーブルに
は、私はいくつかの特定のレートでこれらのIDを "マージ" する必要があります:所有者の
- 50%が1車
- 20%を持っています残りの所有者は 残りの
- 10-10-10%が3、4、5台
を持っています2台を持っています重要なもの:
- ノート所有者と車表について:料金:100のユニットの所有者のために、210台の単位の車が生成され、所有表に車が一意になり、その210行あまりにもこの表になります
- 最初所有者は、その後、車行は、その後でI
- を生成します車
注意「から」所有テーブルいくつかの値にSERT:ここで私は(それはv_custom_unit片を生成します
車(所有者が似ている)に行を生成する方法でありますこの単位は、私が数行前に与えた料金から計算されます(100台のユニット所有者のために210台のユニット車が生成され、210ユニットの所有権もあります)。次に、forループを使用して行を掛けます。
insert /*+ APPEND */ into Cars(
carId
, carType
, ...
)
select /*+ PARALLEL */
seq_carid.nextval as carId
, REGEXP_SUBSTR('Suziki,Toyota,Subaru,Saab,Hyundai,Opel,Volkswagen', '([^,]+)', 1, ROUND(DBMS_RANDOM.VALUE(1,7))) as carType
, ...
from dual
connect by level <= v_custom_unit;
乗算は、このようなものです:
FOR i in 1..v_forSteps LOOP
EXECUTE IMMEDIATE '
insert /*+ APPEND */ into Cars (
carId,
, carType,
, ...
)
SELECT /*+ PARALLEL */
seq_carid.nextval as carId,
, carType
, ...
FROM Cars
WHERE ROWNUM <= ' || v_custom_unit;
COMMIT;
END LOOP;
次のステップは、所有権の行を生成することです:
insert /*+ APPEND */ into Ownership (
ownerId
, carId
, date_bought
)
select /*+ PARALLEL */
1
, c.carId
, some_random_date as date_bought
from Cars c;
ここに私の問題が来る:すべての車がOWNERID = 1と所有権です。
私の質問は、オーナーシップテーブルを1つのアップデートで異なる所有者の値で更新するにはどうすればいいですか?(50%-20%-10%-10%-10%)それを行うための方法の
ありがとうございました! 残念ながら、データの生成を容易にする質問を投稿した後、私は新しい情報を得ましたが、これは答えとして受け入れることになります。便利なので、クエリの数値を操作してより多くの行を生成する必要がありました。 あなたが(そして他の誰かに)関心があれば、すぐに私の解決策を共有します。 – Pohkalopokh