これが状況です。OracleSQLDBにテーブルがあります。そのテーブルは、レポートの目的で使用されます。これはテスト/開発環境です。このDBを使用してレポートツールで新しいグループ化機能をテストしたいのですが、すべての「番号」を更新して置き換える必要があります(そのテーブルのキーではありません)。複数のデータセットが同じ「番号」を共有できます。更新された番号は、自動テスト可能であるために特定のパターンに従う必要があります。新しい数字ごとに増加する整数のようなものを考えました。これまでに行ったことは次のとおりです。最初に、そのテーブル内のすべての一意の「数値」をクエリし、次に結果テーブルをループして、見つかった「数値」のそれぞれを生成された「new_number」に置き換えます。次に、「new_number」を1つ増やしてから、次の「number」を取得します。
コードは次のとおりです。
DECLARE
Cursor MyCursor IS
SELECT DISTINCT NUMBER
FROM TABLE
ORDER BY NUMBER;
entry MyCursor%ROWTYPE;
new_number NUMBER := 111111;
BEGIN
FOR entry IN MyCursor LOOP
IF MyCursor%FOUND THEN
UPDATE TABLE
SET
NUMBER = new_number,
WHERE NUMBER = ENTRY.NUMBER;
new_number := new_number + 1;
ELSIF myCursor%NOTFOUND THEN
EXIT;
END IF;
END LOOP;
END;
問題は、スクリプトが実行されることですが、更新された行は1つだけであると言われています(最後の行のようです)。
何故ですか?
私は置くことができます
DBMS_OUTPUT.PUT_LINE(entry.number);
ループ内にあり、反復ごとにTABLEで見つかったすべての一意の番号が表示されるため、ループ自体が機能しているように見えます。
そして、ただmabye ...ループなしでそれを行う方法はありますか?何も思いつかなかった。
このスクリプトは、テスト実行の準備として1回だけ(動作するとすぐに)実行されます。
よろしくお願いします!