source

Oracle ID 열 및 선택 항목에 삽입

ittop 2023. 7. 31. 21:53
반응형

Oracle ID 열 및 선택 항목에 삽입

Oracle 12는 오래 전에 존재했어야 하는 기능인 ID 열을 도입했습니다.여기 대본이 있습니다.

CREATE TABLE test (
    a INTEGER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
    b VARCHAR2(10)
);

-- Ok
INSERT INTO test (b) VALUES ('x');

-- Ok
INSERT INTO test (b)
SELECT 'y' FROM dual;

-- Fails
INSERT INTO test (b)
SELECT 'z' FROM dual UNION ALL SELECT 'zz' FROM DUAL;

처음 두 개의 삽입은 1과 2의 'a' 값을 제공하는 문제 없이 실행됩니다.하지만 세 번째는 실패합니다.ORA-01400: cannot insert NULL into ("DEV"."TEST"."A")왜 이런 일이 일어났을까요?벌레?이와 같은 내용은 ID 열 제한에 대한 설명서 부분에 언급되어 있지 않습니다.아니면 제가 잘못하고 있는 건가요?

아래 쿼리가 작동하는 것 같습니다, 테스트해 본 적이 없습니다!

INSERT INTO Test (b)
SELECT * FROM
(
   SELECT 'z' FROM dual
   UNION ALL
   SELECT 'zz' FROM dual
);

잘 모르겠어요, 도움이 될지 모르겠지만요.

위해서,GENERATED ALWAYS AS IDENTITYOracle은 내부적으로 Sequence만 사용합니다.일반 시퀀스의 옵션도 여기에 적용됩니다.

NEXTVAL은 사용 가능한 다음 시퀀스를 가져오는 데 사용되며 명백히 유사 열입니다.

아래는 오라클 제품입니다.

사용할 수 없습니다.CURRVAL그리고.NEXTVAL다음 구성에서.

  • 의 하위 쿼리DELETE,SELECT또는UPDATE진술
  • 뷰 또는 구체화된 뷰에 대한 쿼리
  • DISTINCT 연산자가 있는 SELECT 문
  • GROUP BY 절 또는 ORDER BY 절이 있는 SELECT 문
  • A SELECT다른 것과 결합된 진술SELECT연합과의 성명서,INTERSECT또는MINUS집합 연산자
  • SELECT 문의 WHERE 절
  • CREATE TABLE 또는 ALTER TABLE 문에서 열의 기본값
  • CHECK 제약 조건

subquery그리고.SET위의 작업 규칙이 질문에 답해야 합니다.

그리고 NULL에 대한 이유로, 언제.pseudocolumn(예: NEXTVAL)은 SET 작업 또는 위에 언급된 다른 규칙과 함께 사용되며, Oracle이 여러 선택 항목을 결합하여 추출할 수 없기 때문에 출력은 NULL입니다.

다음 질문을 보겠습니다.

select rownum from dual
union all 
select rownum from dual

결과는

ROWNUM
1
1

언급URL : https://stackoverflow.com/questions/21355770/oracle-identity-column-and-insert-into-select

반응형