我是以正确的方式构建我的SQL游标吗?

Eve*_*Eve 1 sql oracle cursor

我下面的脚本将使用两个外部表填充两个单独的表,但我不确定我是否正确使用我的光标.如果我以不正确的方式使用它,请帮我纠正错误.

//更新它是一个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;
Run Code Online (Sandbox Code Playgroud)

Kar*_*arl 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;
Run Code Online (Sandbox Code Playgroud)