如何在plsql中比较具有相同列的两个表?

时间:2018-11-01 14:46:19

标签: sql oracle plsql compare

我有两个表:aanvr_omzetten(请求)和klant(客户)

表的结构:

AANVR_OMZETTEN

VOORNAAM ACHTERNAAM GESLACHT GEBOORTEDATUM EMAIL
A        John       M        07-01-1990    v1@gmail.com
B        Jaxk       V        01-04-1965    v2@gmail.com


KLANT

NAAM ACHTERNAAM GESLACHT GEBOORTEDATUM EMAIL        NATION BANKNR STUDY
A    John       M        07-01-1990    v1@gmail.com DUTCH  12     YES
B    Jack       M        01-04-1965    v2@gmail.com DUTCH  15     YES

这是我的代码:

DECLARE
v_klantnummer number;
v_rekeningnummer number;

BEGIN
    -- get klantnummer and rekeningid
    BEGIN
        select klantnummer, rekeningid into v_klantnummer, v_rekeningid from rekening where rekeningnummer = :P501_REKENINGNR and rekeningtype = 23;
    EXCEPTION
        when no_data_found then
            raise_application_error(-20000, 'Rekeningnummer is onbekend');
    END;

    -- get the information of klant X with klantnummer v_klantnummer

    for i in (select voornaam, achternaam, geslacht, geboortedatum, email, postcode, huisnummer, straat, plaats, nationaliteit, burgerservicenummer
             from klant where klantnummer = v_klantnummer)
             loop

             -- compare with other table?? 
             -- 

     for i in (select voornaam, achternaam, geslacht, geboortedatum, email, postcode, huisnummer, straat, plaats, nationaliteit, burgerservicenummer
             from aanvr_omzetten where aanvr_omzetten = :P501_aanvr_omzettennr)

             -- both tables loaded but how can i compare them?

             -- ONLY if the selected attributes match 

             INSERT etc.

我不需要比较所有列,只需比较aanvr_omzetten中表中的那些列,因为表klant具有所有这些列以及其他所有列。

KLANT中行的主键:v_klantnummer
AANVR_OMZETTEN中行的主键::P501_AANVR_OMZETTENNR

我只想在那些列匹配时进行插入,否则它会引发错误。

你知道我该怎么做吗?

2 个答案:

答案 0 :(得分:1)

因此,您想插入两个命名表中都存在的某些(第三个)表值吗?您可以使用INSSECT运算符通过SQL INSERT语句来执行此操作,以标识匹配的行。

insert into whatever
select VOORNAAM, ACHTERNAAM, GESLACHT, GEBOORTEDATUM, EMAIL 
from AANVR_OMZETTEN
intersect 
select NAAM, ACHTERNAAM, GESLACHT, GEBOORTEDATUM, EMAIL   
from KLANT
;     

这可能不是一个完整的解决方案(例如,它忽略了主键的问题)。但是您的问题并未提供有关如何处理此类问题的任何线索。如果您需要进一步的帮助,请澄清您的问题。

答案 1 :(得分:0)

  • -创建一种仅显示常见列的类型

    -将这些类型的表的数组弹出表的

    -以一个循环进行循环,例如KLANT
    -foreach行检查 如果它存在于AANVR_OMZETTEN表数组中。
      - 如果不;       插入;    如是      接下来继续。

https://www.tutorialspoint.com/plsql/plsql_arrays.htm