oracle 저장 프로세스 - 저장량 데이터 대량 삽입
도매 조회를 위해 다중 라인을 봉하여 두보 인터페이스를 호출하려고 했는데 두보 서비스 제공자가 감당하지 못할까 봐 두렵다.
스크립트 브러시를 고려하면 다음과 같은 스크립트가 있습니다.
update mem.mem_base_info i
set i.nation = decode(i.nation,
null,
(select nation
from risk.loan_identity_personinfo p
where i.cust_id = p.mid),
i.nation),
i.police_station = decode(i.police_station,
null,
(select id_org
from risk.loan_identity_personinfo p
where i.cust_id = p.mid),
i.police_station),
i.id_validity_date = decode(i.id_validity_date,
null,
(select case length(p.id_effect_date)
when 21 then
to_date(substrb(p.id_effect_date,
12),
'yyyy.mm.dd')
else
null
end
from risk.loan_identity_personinfo p
where i.cust_id = p.mid),
i.id_validity_date),
i.id_address = decode(i.id_address,
null,
(select id_address
from risk.loan_identity_personinfo p
where i.cust_id = p.mid),
i.id_address),
i.update_time = sysdate
where i.cust_id = 3800000273511449;
dba 브러쉬 데이터를 찾았는데 dba는'너 같은 데이터는 브러쉬를 할 수 없어. 실행이 너무 느려.","메모리 프로세스 브러시를 써라",dba는"이렇게 놀지 않을 거야!"마음속의 천만 마리의 알파카가 쏜살같이 달려가는 것을 듣고 혼자서 저장 과정을 쓸 수밖에 없었다. 다행히 이전에 저장 과정의 각본이 있어서 참고할 수 있었다.
저장 프로세스 v1 버전
create or replace procedure proc_update_meme_id_card_info is
i number;
begin
--
i := 0;
--
while i < 850 loop
-- update 1
for x in (select mid,nation,
case length(p.id_effect_date)
when 21 then
to_date(substrb(p.id_effect_date, 12), 'yyyy.mm.dd')
when 17 then
to_date(substrb(p.id_effect_date, 10), 'yyyymmdd')
else null end as id_effect_date,
id_address, id_org from risk.loan_identity_personinfo p where trunc(p.update_time) = trunc(sysdate - i)) loop
update mem.mem_base_info i
set i.nation = decode(i.nation, null, x.nation, i.nation),
i.police_station = decode(i.police_station, null,x.id_org,i.police_station),
i.id_validity_date = decode(i.id_validity_date, null, x.id_effect_date, i.id_validity_date),
i.id_address = decode(i.id_address, null, x.id_address, i.id_address),
i.update_time = sysdate where i.cust_id = x.mid;
commit;
end loop;
Dbms_Output.put_line( ' i : ' || i);
i := i + 1;
end loop;
end proc_update_meme_id_card_info;
실행 발견 시간의 스팸 데이터가 너무 많습니다. 정상적인 상황: 2010.01.02-2020.01.02 또는 2010.01.02-장기 또는 20100102-20200102 결과 데이터베이스에 2010.01.02-20.201.001.02 스팸 데이터가 있습니다. 처리를 소홀히 해야 합니다. 멍~~
나중에 저장 과정에 이상 정보가 나타날 수 있다고 생각하고 무시한 v2판이 나왔어요.
create or replace procedure proc_update_meme_id_card_info is
i number;
begin
--
i := 0;
--
while i < 850 loop
-- update 1
for x in (select mid,nation,
case length(p.id_effect_date)
when 21 then
to_date(substrb(p.id_effect_date, 12), 'yyyy.mm.dd')
when 17 then
to_date(substrb(p.id_effect_date, 10), 'yyyymmdd')
else null end as id_effect_date,
id_address, id_org from risk.loan_identity_personinfo p where trunc(p.update_time) = trunc(sysdate - i)) loop
update mem.mem_base_info i
set i.nation = decode(i.nation, null, x.nation, i.nation),
i.police_station = decode(i.police_station, null,x.id_org,i.police_station),
i.id_validity_date = decode(i.id_validity_date, null, x.id_effect_date, i.id_validity_date),
i.id_address = decode(i.id_address, null, x.id_address, i.id_address),
i.update_time = sysdate where i.cust_id = x.mid;
commit;
end loop;
Dbms_Output.put_line( ' i : ' || i);
i := i + 1;
end loop;
end proc_update_meme_id_card_info;
번역 성공!큰 성과를 거두다
스토리지 프로세스 실행
begin
-- Call the procedure
proc_update_meme_id_card_info;
end;
Storage Process Write:
CREATE OR REPLACE PROCEDURE 저장 프로세스 이름(param1 in type, param2 out type)
IS
변수 1 유형(값 범위);
변수 2 유형(값 범위);
BEGIN
select count(*) into 변수 1 from 표 이름where 열 이름 =param1;
if(판단 조건) then
select 열명 into 변수 2 from 표명where 열명 =param1;
DBMS_OUTPUT.put_라인
Elsif(판단 기준) then
dbms_output.put_라인
Else
Raise 예외 이름(NO DATA FOUND);
End if;
Exception
When others then
Rollback;
END;
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.