我有一组具有多行相同的数据unique_string_identifier
。我想将一个新的唯一 ID 从一个序列分配给一行的第一个实例,unique_string_identifier
然后给出具有相同unique_string_identifier
ID 时间 -1 的任何后续行。我已经尝试了三种不同的方式,但我总是得到
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 错误,我将不胜感激。