여기oracle에 기존 레코드가있는 테이블에서 레코드를 찾는 방법은 무엇입니까?
insert into test values(1,'a1','a2',...,'an');
insert into test values(2,'a1','a3',...,'am');
insert into test values(3,'a4','a2',...,'ax');
는 이제 ID = 1 예 포어 (행을 하나 개의 행을 복사 할 필요가 일부 예 데이터로 채워진 컬럼
create table test (
id number,
col_1 varchar2(50),
col_2 varchar2(50),
.
.
col_n varchar2(50)
);
테이블 높은 번호 테이블의) 결과가 다른 행과 유사하지 않으면 (ID를 고려하지 않고) 한 열의 값만 변경하십시오. 이 같은 어떤 것을 :
declare
r test%rowtype;
var1 number;
begin
insert into r from test where id = 1;
r.col_2='a3';
select count (*) into var1 from test where 'the row without id' = r;
if (var1 = 0) then
insert into test values r;
end if;
end;
하지만 난 오라클의 선택 부분을 작성하는 방법을 모르겠어요. 테이블 테스트에는 많은 컬럼이 있으므로 where 절에 모든 컬럼을 쓸 수는 없다고 생각하십시오.
오라클이 정말로에서 참조 할 수있는 컬럼의 수를 제한하지 않습니다'where' 절과는의 열 수를 제한하지 테이블. 컬럼이 많으면 메타 데이터 테이블을 사용하여 테이블을 추출하고 코드를 생성하십시오. –
[관련 질문, 아마도,하지만 꽤 동일하지] (http://stackoverflow.com/q/9133120/266304). 카운트를 할 때와 삽입 할 때 사이의 경쟁 조건 가능성을 고려해 볼 가치가 있습니다. 작은 창이지만 두 개의 세션이 여전히 충돌하여 중복을 삽입 할 수 있습니다. 모든 열에 대한 고유 색인은 상당한 오버 헤드가 될 수 있지만 아마도 고려 될 수 있으며 또한 계산 속도를 높일 수 있습니다. –
아마도'select' 쿼리에서'id is null'입니까? – Rachcha