подсчет количества машин у каждого владельца - PullRequest
0 голосов
/ 02 марта 2020

Я пытаюсь выучить pl sql и застрял в понимании некоторых базовых c вещей. Вот проблема, которую я пытаюсь решить. У меня есть две таблицы. Один содержит информацию о владельцах, а другой - информацию об автомобилях. Я хочу написать анонимный блок, объединяющий эти две таблицы, и для l oop в зависимости от количества автомобилей, зарегистрированных для каждого владельца, будет напечатано, сколько автомобилей принадлежит каждому человеку. Кроме того, я хочу оператор if, который различает 1 Car (единственное) и 2,3 Car (множественное число).

таблицы следующие:

CREATE TABLE owners(
id_nr VARCHAR2(13) PRIMARY KEY,
f_name VARCHAR2(20),
s_name VARCHAR2(20));

CREATE TABLE cars(
reg_nr VARCHAR2(6) PRIMARY KEY,
id_nr REFERENCES owners(pnr),
model VARCHAR2(20),
year NUMBER(4),
date DATE);

Результат может выглядеть примерно так это:

19380321-7799, Ганс, Андерсон, Владелец: 1 машина

19490321-7899, Майк, Эриксон, Владелец: 2 машины

. , , et c.

Я пробовал много разных способов, но каждый раз я получаю некоторые ошибки. Буду признателен за любую помощь и советы, которые помогут мне понять это.

Спасибо!

1 Ответ

0 голосов
/ 03 марта 2020

Ну, вот один из способов сделать это. Если вы хотите попрактиковаться в петлях, вы можете добавить вторую l oop внутри l oop поверх таблицы машин и распечатать все машины, которые есть у каждого владельца.

declare
    v_suffix varchar2(1);
begin
    for o in (select owners.id_nr, f_name, s_name,
                (select count(1) from cars where cars.id_nr = owners.id_nr) as num_cars
                from owners)
    loop
        if o.num_cars = 1 
            then v_suffix = null -- singular
            else v_suffix = 's' -- plural
        end if;
        dbms_output.put_line(o.id_nr || ', ' || o.f_name || ', ' || o.s_name
            || ' Owns: ' || o.num_cars || ' car' || v_suffix);
    end loop;
end;
/
...