1

同じ を持つ複数の行を持つデータのセットがありますunique_string_identifier。シーケンスから行の最初のインスタンスに新しい一意の ID を割り当て、unique_string_identifierそれを使用して、同じunique_string_identifierID を -1 倍した後続の行を指定します。私はそれを3つの異なる方法で試しましたが、私はいつも得ます

ORA-30483: ここではウィンドウ関数は使用できません

これが私の試みです:

UPDATE my_table
    set my_id =
        CASE    WHEN LAG(unique_string_identifier, 1, '-') OVER (order by unique_string_identifier) <> unique_string_identifier THEN my_id_seq.nextval
                ELSE LAG(-1 * my_id, 1, '-') OVER (order by unique_string_identifier) END CASE
    where import_run_id = a_run_id;

私もこれを試しました:

    UPDATE my_table
    set my_id = my_id_seq.nextval
    where row_number() over (partition by unique_string_identifier order by line_id) = 1;
//another update statement to make the rows with null ID's equal to the negative id joined on unique_string_identifier

この:

UPDATE my_Table
    set my_id =
        decode(unique_string_identifier, LAG(unique_string_identifier, 1, '-') OVER (order by unique_string_identifier), LAG( my_id, 1, '-') OVER (order by unique_string_identifier), my_id_seq.nextval)
    where import_run_id = a_run_id;

どうすればこれを機能させることができますか?

編集:また、私自身の充実のために、これら3つのステートメント(私にはかなり異なっているように見える)がまったく同じORAエラーになる理由を誰かが説明できれば、感謝します。

4

1 に答える 1