Oracle에서 시퀀스가 있는 여러 행 삽입
Oracle 데이터베이스에 여러 행을 삽입하기 위해 사용한 쿼리입니다.그러나 그 안에서 시퀀스를 사용하면 ORA-00001: 고유 제약 조건으로 오류가 발생합니다.하는 방법.
INSERT ALL
INTO POSTAL_CODE( postal_code,desc)
VALUES(postal_code.NEXTVAL,'Coimbatore')
INTO POSTAL_CODE (postal_code,desc)
VALUES(postal_code.NEXTVAL,'Mumbai') SELECT * FROM DUAL;
- 다중 삽입 문의 어떤 부분에서도 시퀀스를 지정할 수 없습니다.다중 삽입은 단일 SQL 문으로 간주됩니다.따라서 NEXTVAL에 대한 첫 번째 참조는 다음 번호를 생성하고 문의 모든 후속 참조는 동일한 번호를 반환합니다.
그렇지 않습니다. 시퀀스를 사용하면 항상 동일한 값을 얻을 수 있으므로 동일한 시퀀스를 참조하여 한 번에 부모 및 자식 레코드를 만드는 것이 유용할 수 있습니다.
계속 사용하려면insert all
시퀀스 값을 가져오는 비결정론적 함수를 사용하여 이 문제를 해결할 수 있습니다.
CREATE FUNCTION get_seq RETURN NUMBER IS
BEGIN
RETURN postal_code_seq.nextval;
END;
/
INSERT ALL
INTO POSTAL_CODE( postal_code,description)
VALUES(get_seq,'Coimbatore')
INTO POSTAL_CODE (postal_code,description)
VALUES(get_seq,'Mumbai') SELECT * FROM DUAL;
2 rows inserted.
SELECT * FROM postal_code;
POSTAL_CODE DESCRIPTION
--------------------------------------- --------------------
1 Coimbatore
2 Mumbai
그런데 좀 어색하네요.개별 삽입문을 사용하는 것이 더 나을 수도 있습니다. 단일 테이블에 다중 삽입을 사용하는 것은 실제로 별로 도움이 되지 않습니다. 또는 시퀀스에서 고유한 열을 설정하는 트리거를 사용하거나 삽입할 값을 생성하는 CTE/인라인 뷰를 사용하는 것이 좋습니다.
데이터베이스 개체를 수정하는 대신 다중 테이블을 간단히 다시 작성할 수 있습니다.INSERT ALL
단판에INSERT
여러 행이 연결된 상태에서UNION ALL
:
INSERT INTO postal_code
SELECT postal_code_seq.NEXTVAL, description
FROM
(
SELECT 'Coimbatore' description FROM dual UNION ALL
SELECT 'Mumbai' description FROM dual
);
시퀀스는 외부 쿼리에서 호출되어야 합니다.내부 쿼리에서 시퀀스를 사용하면 코드를 단순화할 수 있지만 "ORA-02287: 시퀀스 번호가 여기서 허용되지 않음" 오류가 발생합니다.
이 방법 대신 삽입 전 트리거를 사용하여 키 열을 채울 것입니다(삽입에서 값이 제공되지 않은 경우).시퀀스는 다중 테이블 삽입에서 잘 작동하지 않습니다.
POSTAL_CODE(postal_code, desc) 값(postal_code)에 모두 삽입합니다.NEXTVAL,&desc) POSTAL_CODE(postal_code,desc) 값(postal_code)에 입력합니다.NEXTVAL, &desc) 선택*(듀얼에서)
Oracle 데이터베이스에 이 다중 행을 삽입하려고 합니다.
INTO POSTAL_CODE (postal_code,desc)
VALUES(&postal_code,&desc) SELECT * FROM DUAL;
언급URL : https://stackoverflow.com/questions/31968093/inserting-multiple-rows-with-sequence-in-oracle
'programing' 카테고리의 다른 글
c 코드를 c++ 코드에 연결할 때 g++ 연결 순서 종속성 (0) | 2023.08.09 |
---|---|
부트스트랩 글리피콘을 ASP 안에 넣으려면 어떻게 해야 합니까?ASP의 버튼입니다.그물? (0) | 2023.08.09 |
파생된 모든 테이블에 별칭이 있습니다!'오류 1248: 파생된 모든 테이블에는 고유한 별칭이 있어야 합니다'라는 메시지가 표시되는 이유는 무엇입니까? (0) | 2023.08.09 |
PHP를 사용하는 MariaDB: SQLSTATE[HY000] [2002] 연결이 거부되었습니다. (0) | 2023.08.09 |
안드로이드에서 방향 변경을 비활성화하려면 어떻게 해야 합니까? (0) | 2023.08.09 |