반응형
Oracle: ORDER BY 절과 함께 ROWNUM을 사용하여 테이블 열 업데이트
테이블 열을 실행 정수로 채우고 싶어서 ROWNUM을 사용하려고 합니다.하지만 다른 열의 순서에 따라 채워야 합니다.ORDER BY column1, column2
안타깝게도 Oracle은 다음 문구를 수락하지 않기 때문에 이는 불가능합니다.
UPDATE table_a SET sequence_column = rownum ORDER BY column1, column2;
다음 문도 없습니다(WITH 절 사용 시도).
WITH tmp AS (SELECT * FROM table_a ORDER BY column1, column2)
UPDATE tmp SET sequence_column = rownum;
그렇다면 PL/SQL에서 커서 반복 방법을 사용하지 않고 SQL 문을 사용하여 어떻게 해야 합니까?
이 방법이 효과가 있을 것입니다(제게 효과가 있습니다).
update table_a outer
set sequence_column = (
select rnum from (
-- evaluate row_number() for all rows ordered by your columns
-- BEFORE updating those values into table_a
select id, row_number() over (order by column1, column2) rnum
from table_a) inner
-- join on the primary key to be sure you'll only get one value
-- for rnum
where inner.id = outer.id);
또는 다음을 사용합니다.MERGE
진술.이런 거.
merge into table_a u
using (
select id, row_number() over (order by column1, column2) rnum
from table_a
) s
on (u.id = s.id)
when matched then update set u.sequence_column = s.rnum
UPDATE table_a
SET sequence_column = (select rn
from (
select rowid,
row_number() over (order by col1, col2)
from table_a
) x
where x.rowid = table_a.rowid)
그러나 Damien이 지적했듯이 테이블의 데이터를 변경할 때마다 이 문을 다시 실행해야 합니다.
첫 번째 시퀀스 만들기:
CREATE SEQUENCE SEQ_SLNO
START WITH 1
MAXVALUE 999999999999999999999999999
MINVALUE 1
NOCYCLE
NOCACHE
NOORDER;
그런 다음 순서를 사용하여 표를 업데이트합니다.
UPDATE table_name
SET colun_name = SEQ_SLNO.NEXTVAL;
조금만 수정하면 ASN을 추가할 수 있습니다.
UPDATE table_a
SET sequence_column = (select rn
from (
select rowid,
row_number() over (order by col1, col2) AS RN
from table_a
) x
where x.rowid = table_a.rowid)
언급URL : https://stackoverflow.com/questions/6094039/oracle-updating-a-table-column-using-rownum-in-conjunction-with-order-by-clause
반응형
'bestsource' 카테고리의 다른 글
ASP.Net MVC에서 확인란 목록을 만드는 방법 (0) | 2023.06.23 |
---|---|
기본 쿼리 및 하위 쿼리에 동일한 별칭 사용 (0) | 2023.06.23 |
.firebase/hosting의 목적은 무엇입니까?ALFANUM.캐시 (0) | 2023.06.23 |
각각 내부 오류를 유발하기 전의 Vue 라우터: 너무 많은 재귀 (0) | 2023.06.23 |
CLI(명령줄)에서 Firebase 사용자 로그인 ID를 변경하는 방법 (0) | 2023.06.23 |