행이 없는 테이블에서 열의 최대값 선택
오라클 데이터베이스를 사용하고 있습니다.
테이블에 행을 삽입하는 동안 열의 최대값을 찾아 1씩 증가시키고, 삽입하는 행에 그 값을 사용해야 합니다.
INSERT INTO dts_route
(ROUTE_ID, ROUTE_UID, ROUTE_FOLDER)
VALUES (
(SELECT MAX(ROUTE_ID) + 1 FROM route) ,
ROUTE_UID,
ROUTE_FOLDER)
테이블에 하나 이상의 항목이 있는 경우 이 작업을 수행할 수 있습니다.그러나 테이블에 항목이 없을 경우 null을 반환합니다.
테이블에 항목이 없는데 기본값 1을 얻으려면 어떻게 해야 합니까?
SELECT COALESCE(MAX(ROUTE_ID),0) ...
이렇게 하면 자동 증분 필드를 안전하게 만들 수 없습니다.Oracle 시퀀스를 사용하여 이 목표를 달성할 수 있습니다.
null의 경우 다음을 사용할 수 있습니다.NVL함수가 null을 반환할 경우 기본값(예: 0)을 제공합니다.
ID에 시퀀스를 사용합니다.시퀀스를 생성해야 합니다.아래 링크 참조
http://www.basis.com/onlinedocs/documentation/b3odbc/sql_sequences.htm
용도:
INSERT INTO dts_route
(ROUTE_ID)
SELECT COALESCE(MAX(r.route_id), 0) +1
FROM ROUTE r
...하지만 실제로는 시퀀스를 사용하여 값을 순차적 숫자 값으로 채워야 합니다.
CREATE SEQUENCE dts_route_seq;
...
INSERT INTO dts_route
(ROUTE_ID)
SELECT dts_route_seq.NEXTVAL
FROM DUAL;
NULL에 대한 기본값 설정
SELECT NVL(MAX(ROUTE_ID),0)
당신의 루트 ID의 이상한 간격을 신경쓰지 않는다면 시퀀스를 사용하는 것이 더 쉬울지도 모릅니다.
null일 때 0을 선택하면 null+1과 비교하여 정확한 숫자인 0+1이 됩니다.
SELECT isnull(MAX(ROUTE_ID),0) + 1 FROM route
루트 ID에 공백이 발생할 우려가 있는 경우 NOCACH 절을 사용하여 시퀀스를 작성합니다.
CREATE SEQUENCE dts_route_seq NOCACHE;
Oracle은 이제 시퀀스를 증가시킬 때마다 "커밋"해야 하므로 성능 히트가 발생합니다.
언급URL : https://stackoverflow.com/questions/4900896/select-max-value-of-a-column-in-table-with-no-rows
'programing' 카테고리의 다른 글
| C#에서 이름과 성의 첫 글자를 대문자로 쓰는 방법은 무엇입니까? (0) | 2023.10.16 |
|---|---|
| 워드프레스 웹사이트의 사이드바 아래에 '1'자리가 나타납니다. (0) | 2023.10.16 |
| ARM 칩에 이름(FJCVTTS)의 자바스크립트가 있는 명령어가 있는 이유는 무엇입니까? (0) | 2023.10.16 |
| Jquery Selector 입력[type=text]) (0) | 2023.10.16 |
| 포크는 정확히 무엇을 돌려 줍니까? (0) | 2023.10.16 |