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 IDENTITY
Oracle은 내부적으로 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
'source' 카테고리의 다른 글
SQL Server Varchar를 Datetime으로 변환 (0) | 2023.07.31 |
---|---|
버전 제어 독립 레코드 및 구성을 기반으로 모든 레코드 나열 (0) | 2023.07.31 |
bind 또는 click으로 이벤트 핸들러를 링크에 바인딩하지 않은 경우 jQuery의 click()을 호출하여 링크를 팔로우할 수 있습니까? (0) | 2023.07.31 |
부트스트랩 3의 열에서 패딩 제거 (0) | 2023.07.31 |
node.js가 설치되었는지 여부를 확인하는 방법 (0) | 2023.07.31 |