Как сравнить две таблицы с одинаковыми столбцами в plsql? - PullRequest
0 голосов
/ 01 ноября 2018

Я получил две таблицы: 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 голосов
/ 01 ноября 2018

Итак, вы хотите вставить в некоторые (третьи?) Значения таблицы, которые существуют в обеих именованных таблицах? Это можно сделать с помощью оператора SQL INSERT, используя оператор INTERSECT для определения совпадающих строк.

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

Возможно, это не полное решение (например, игнорируется вопрос первичных ключей). Но ваш вопрос не дает никаких подсказок о том, как вы хотите справиться с такими вещами. Если вам нужна дополнительная помощь, пожалуйста, уточните свой вопрос.

0 голосов
/ 01 ноября 2018
  • - Создать тип для представления только общих столбцов

    - вытолкнуть массив таблиц этого типа из таблицы

    - итерация с одним циклом, например, для KLANT
    - проверка каждой строки если он существует в массиве таблиц AANVR_OMZETTEN.
    -- если не; вставить; Если да продолжить дальше.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...