Oracle - 자동 증분 ID를 사용하여 새 행 삽입
워크큐 테이블에는 워크큐 열이 있습니다. ★★★아이디 id id id id id id id id 。할 수 있는 ?아이디 ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★?
Null " " " ORA01400 - Null insert inter workid " " " 。
insert into WORKQUEUE (facilitycode,workaction,description) values ('J', 'II', 'TESTVALUES')
지금까지 시도했던 것 - 표의 세부사항을 살펴보려고 했지만 자동 증가하지 않았습니다.테이블 스크립트는 다음과 같습니다.
"WORKID" NUMBER NOT NULL ENABLE,
데이터베이스:Oracle 10g
이치노
답변:
도움에 대해 한 사람 한 사람에게 감사드려요.오늘은 좋은 학습 경험이었고, 여러분의 도움이 없었다면 저는 할 수 없었을 것입니다.결론은 이미 시퀀스와 트리거가 있는 테이블에 행을 삽입하려고 했습니다.제가 해야 할 일은 제 질문에 대한 올바른 시퀀스를 찾아 그 시퀀스를 제 쿼리에 호출하는 것이었습니다.
이 workid 열에 해당하는 시퀀스를 검색하여 찾을 수 있도록 도와준 링크입니다.여러분 덕분에 모두에게 엄지손가락을 치켜세웠습니다.오늘은 또 다른 용과 씨름하여 환자 치료를 한 걸음 더 나아갈 수 있게 되었습니다.
트리거나 시퀀스를 사용하지 않고 간단하게 실행할 수 있습니다.
insert into WORKQUEUE (ID, facilitycode, workaction, description)
values ((select max(ID)+1 from WORKQUEUE), 'J', 'II', 'TESTVALUES')
저에겐 효과가 있었지만 빈 테이블에서는 작동하지 않을 것 같아요.
자동 증분 번호를 얻으려면 Oracle에서 시퀀스를 사용해야 합니다.(여기와 여기를 참조).
CREATE SEQUENCE my_seq;
SELECT my_seq.NEXTVAL FROM DUAL; -- to get the next value
-- use in a trigger for your table demo
CREATE OR REPLACE TRIGGER demo_increment
BEFORE INSERT ON demo
FOR EACH ROW
BEGIN
SELECT my_seq.NEXTVAL
INTO :new.id
FROM dual;
END;
/
Oracle에는 기본 제공 auto_increment가 없습니다.
'어울리다'를 써야 요.sequences
★★★★★★★★★★★★★★★★★」triggers
.
올바른 작업 방법을 읽어보십시오. ("Oracle에서 자동 증가 열 작성"에 대한 단계별 사용 방법)
ELXAN@DB1> create table cedvel (id integer, ad varchar2(15)); 테이블이 생성되었습니다. ELXAN@DB1> 변경 테이블 cedvel add 제약조건 pk_ad 프라이머리 키(id; 테이블이 변경되었습니다. ELXAN@DB1> create seq test_seq start는 1씩 증분합니다. 시퀀스가 작성되었습니다. ELXAN@DB1> 트리거 ad_insert 작성 또는 치환삼나무에 삽입하기 전에새로운 것을 낡은 것으로 참조하다각 행마다시작한다.듀얼에서 :new.id으로 test_seq.nextval을 선택합니다.종료./ 2 3 4 5 6 7 8 트리거가 생성되었습니다. ELXAN@DB1> cedvel(ad) 값('nese')에 삽입합니다. 행이 1개 작성되었습니다.
할 수 .SEQUENCE
★★★★★★★★★★★★★★★★★」TRIGGER
내의 의 값을 으로 증가시키려면 , 「」를 사용합니다.TRIGGERS
더 적절할 것 같습니다.적절한 예시와 함께 트리거와 함께 사용되는 major 구가 포함된 Oracle의 다음 설명서를 참조하십시오.
CREATE TRIGGER 문을 사용하여 다음과 같은 데이터베이스 트리거를 만들고 활성화합니다.
테이블, 스키마 또는 데이터베이스와 관련된 저장된 PL/SQL 블록 또는
익명 PL/SQL 블록 또는 PL/SQL 또는 Java에서 구현된 프로시저 호출
Oracle Database는 지정된 조건이 발생하면 자동으로 트리거를 실행합니다.보세요.
다음은 간단한 설명입니다.TRIGGER
이 컬럼의 최대값을 기반으로 지정된 테이블에 프라이머리 키 값을 삽입하는 예를 나타냅니다.스키마명, 테이블명 등을 수정하여 사용할 수 있습니다.그냥 한번 해봐.
/*Create a database trigger that generates automatically primary key values on the CITY table using the max function.*/
CREATE OR REPLACE TRIGGER PROJECT.PK_MAX_TRIGGER_CITY
BEFORE INSERT ON PROJECT.CITY
FOR EACH ROW
DECLARE
CNT NUMBER;
PKV CITY.CITY_ID%TYPE;
NO NUMBER;
BEGIN
SELECT COUNT(*)INTO CNT FROM CITY;
IF CNT=0 THEN
PKV:='CT0001';
ELSE
SELECT 'CT'||LPAD(MAX(TO_NUMBER(SUBSTR(CITY_ID,3,LENGTH(CITY_ID)))+1),4,'0') INTO PKV
FROM CITY;
END IF;
:NEW.CITY_ID:=PKV;
END;
WORD는 으로 '있다'는 등의 값을 합니다.CT0001
,CT0002
,CT0002
등이며 지정된 표의 지정된 열에 삽입합니다.
SQL trigger for automatic date generation in oracle table:
CREATE OR REPLACE TRIGGER name_of_trigger
BEFORE INSERT
ON table_name
REFERENCING NEW AS NEW
FOR EACH ROW
BEGIN
SELECT sysdate INTO :NEW.column_name FROM dual;
END;
/
완전한 노하우 방법, 트리거와 시퀀스의 예를 포함했습니다.
create table temasforo(
idtemasforo NUMBER(5) PRIMARY KEY,
autor VARCHAR2(50) NOT NULL,
fecha DATE DEFAULT (sysdate),
asunto LONG );
create sequence temasforo_seq
start with 1
increment by 1
nomaxvalue;
create or replace
trigger temasforo_trigger
before insert on temasforo
referencing OLD as old NEW as new
for each row
begin
:new.idtemasforo:=temasforo_seq.nextval;
end;
레퍼런스: http://thenullpointerexceptionx.blogspot.mx/2013/06/llaves-primarias-auto-incrementales-en.html
이 기능은 Oracle 12c에서 지원되고 있습니다.그리고 아마 방아쇠가 접근하는 것보다 더 빠르겠지예를 들어 다음과 같습니다.
CREATE TABLE foo
(
id NUMBER GENERATED BY DEFAULT AS IDENTITY (
START WITH 1 NOCACHE ORDER ) NOT NULL ,
name VARCHAR2 (50)
)
LOGGING ;
ALTER TABLE foo ADD CONSTRAINT foo_PK PRIMARY KEY ( id ) ;
최적의 접근법: 시퀀스에서 다음 값을 얻습니다.
은 ""를 입니다.NEXTVAL
SEQUENCE
테이블과 "관련"되어 있습니다.시퀀스는 특정 테이블과 직접 관련되어 있지 않기 때문에 시퀀스 이름 표기법에서 대응하는 테이블을 수동으로 참조해야 합니다.
테이블에서 사용되는 시퀀스 이름은 시퀀스 명명 규칙을 따를 경우 테이블 이름 안에 테이블 이름이 표시됩니다.<table_name>_SEQ
이데올로기 때문에
먼저 Oracle 시스템 내에 테이블에 "관련된" 시퀀스가 있는지 확인합니다.
SELECT * FROM all_sequences
WHERE SEQUENCE_OWNER = '<schema_name>';
이런 걸 보여드릴게요
잡아!SEQUENCE_NAME
NEXTVAL
중 한 가지INSERT
INSERT INTO workqueue(id, value) VALUES (workqueue_seq.NEXTVAL, 'A new value...')
추가 힌트
잘 , 바랍니다.LAST_NUMBER
시퀀스(현재 값을 의미)의 최대 ID를 지정합니다.예측되는 것은LAST_NUMBER
갭이 너무 크지 않은 한 테이블 내의 현재 최대 ID 값 이상입니다.
SELECT LAST_NUMBER
FROM all_sequences
WHERE SEQUENCE_OWNER = '<schema_name>' AND SEQUENCE_NAME = 'workqueue_seq';
SELECT MAX(ID)
FROM workqueue;
다른 방법: 테이블에서 현재 최대 ID를 가져옵니다.
다른 방법은 표에서 최대값을 얻는 것입니다. 같은 질문의 Zsolt Sky 답변을 참조하십시오.
트리거나 시퀀스를 사용하지 않고 간단하게 실행할 수 있습니다.
WORKQUUE(ID, 설비 코드, 작업 조치, 설명) 값((WORKUUE에서 카운트(1)+1 선택), 'J', 'II', 'TESTVALUES')에 삽입합니다.
참고: 여기서는 max(id) 열 대신 count(1)를 사용해야 합니다.
빈 테이블에서도 완벽하게 작동합니다.
언급URL : https://stackoverflow.com/questions/8717675/oracle-insert-new-row-with-auto-incremental-id
'programing' 카테고리의 다른 글
Http로부터의 JSON 해석URL연결 오브젝트 (0) | 2023.03.02 |
---|---|
각도 테이블 행 지시문이 테이블 내부에 렌더링되지 않음 (0) | 2023.03.02 |
jQuery를 사용하여 JSON 트리를 검색하는 방법 (0) | 2023.03.02 |
람다를 사용하여 S3에서 데이터 읽기 (0) | 2023.02.25 |
실행 중인 mongodb에 덤프를 복원하는 방법 (0) | 2023.02.25 |