我的下面的脚本将使用两个外部表填充两个单独的表,但我不确定我是否正确使用我的光标。如果我以不正确的方式使用它,请帮我纠正错误。
//更新 它适用于oracle数据库(ORACLE SQL)
DECLARE
L_volg_no1 NUMBER;
L_volg_no2 NUMBER;
CURSOR c_gip IS
SELECT
artikelnummer,
ingangsdatum,
grossiersprijs
FROM dc_RMSSID_GIP;
CURSOR c_gip_promo IS
SELECT
artikelnummer,
ingangsdatum
promo_nummer,
actie_grossiersprijs
FROM dc_RMSSID_GIPPromo;
BEGIN
FOR r_sid1 in c_gip
LOOP
SELECT daa_imp_rms_gip_seq.NEXTVAL INTO L_volg_no1 FROM DUAL;
INSERT
INTO daa_imp_rms_grossiersprijs (
volg_nr
,importtijdstip
,importstatus
,artikelnummer
,ingangsdatum
,grossiersprijs
)
VALUES (
L_volg_no1,
SYSDATE,
'N',
r_sid1.artikelnummer,
r_sid1.ingangsdatum,
r_sid1.grossiersprijs
);
END LOOP;
FOR r_sid2 in c_gip_promo
LOOP
SELECT daa_imp_rms_prm_gip_seq.NEXTVAL INTO L_volg_no2 FROM DUAL;
INSERT
INTO daa_imp_rms_prm_grossiersprijs (
volg_nr
,importtijdstip
,importstatus
,artikelnummer
,ingangsdatum
,promo_nummer
,grossiersprijs
)
VALUES (
L_volg_no2,
SYSDATE,
'N',
r_sid2.artikelnummer,
r_sid2.ingangsdatum,
r_sid2.promo_nummer,
r_sid2.grossiersprijs
);
END LOOP;
COMMIT;
END;
答案 0 :(得分:6)
语法看起来相当不错但是比我的眼睛更信任你的测试:)
但更重要的是;为什么使用游标执行此任务?两个插入语句将执行相同的工作,并且基于集合(而不是程序)的代码可能在大多数RDBMS中表现更好。
Begin
INSERT
INTO daa_imp_rms_grossiersprijs (
volg_nr
,importtijdstip
,importstatus
,artikelnummer
,ingangsdatum
,grossiersprijs
)
select (
daa_imp_rms_gip_seq.NEXTVAL,
SYSDATE,
'N',
artikelnummer,
ingangsdatum,
grossiersprijs
FROM dc_RMSSID_GIP;
INSERT
INTO daa_imp_rms_prm_grossiersprijs (
volg_nr
,importtijdstip
,importstatus
,artikelnummer
,ingangsdatum
,promo_nummer
,grossiersprijs
)
select
daa_imp_rms_prm_gip_seq.NEXTVAL,
SYSDATE,
'N',
artikelnummer,
ingangsdatum
promo_nummer,
actie_grossiersprijs
FROM dc_RMSSID_GIPPromo;
commit;
end;
答案 1 :(得分:0)