Вам не нужна отдельная таблица для клиентов; просто вставьте типы в таблицу USER
.
Если вы хотите указать клиента, введите customer_t
тип:
INSERT INTO "USER" VALUES(
customer_t(
1,
'person1@customer.example.com',
'abcdefg',
name_t( 'One', 'Uno' ),
address_t( 'province','street', 'city', '12345' ),
'0123456789'
)
);
Если вы хотите вставить пользователя, то используйте user_t
или вставьте значения без типа:
INSERT INTO "USER" VALUES(
2,
'person2@user.example.com',
'abcdefg',
name_t( 'Two', 'Dos' ),
address_t( 'province','street', 'city', '12345' ),
'0123456789'
);
Если вы хотите вставить сотрудника, используйте staff_t
:
INSERT INTO "USER" VALUES(
staff_t(
3,
'person3@staff.example.com',
'abcdefg',
name_t( 'Three', 'Tres' ),
address_t( 'province','street', 'city', '12345' ),
'0123456789',
12345.67,
(SELECT REF(r) FROM "RANK" r WHERE rankno = 2 )
)
);
Тогда данные будут иметь правильные типы (которые можно извлечь с помощью SYS.ANYDATA
) и использовать функцию TREAT
для преобразования супертипа в подтип:
SELECT idno,
email,
SYS.ANYDATA.getTypeName( SYS.ANYDATA.convertObject( VALUE(u) ) ) As type,
TREAT(VALUE(u) AS staff_t).salary AS salary,
TREAT(VALUE(u) AS staff_t).rank.name AS rank
FROM "USER" u
вывод:
IDNO | EMAIL | TYPE | SALARY | RANK
---: | :--------------------------- | :------------------------------------- | -------: | :------
1 | person1@customer.example.com | FIDDLE_KPHUNVHPVRKOYQBWVAQS.CUSTOMER_T | <em>null</em> | <em>null</em>
2 | person2@user.example.com | FIDDLE_KPHUNVHPVRKOYQBWVAQS.USER_T | <em>null</em> | <em>null</em>
3 | person3@staff.example.com | FIDDLE_KPHUNVHPVRKOYQBWVAQS.STAFF_T | 12345.67 | Manager
и:
SELECT idno,
email
FROM "USER" u
WHERE VALUE(u) IS OF TYPE (customer_t)
выходы:
IDNO | EMAIL
---: | :---------------------------
1 | person1@customer.example.com
и ваша вставка должна преобразовать REF
от супертипа user_t
до подтипа customer_t
с использованием функции TREAT
:
INSERT INTO project VALUES (
1,
'Project name',
'Description',
( SELECT TREAT( REF(u) AS REF customer_t )
FROM "USER" u
WHERE idno = 1
AND VALUE(u) IS OF TYPE (customer_t)
),
( SELECT REF(s) FROM service s WHERE serviceno = 1)
);
db <> скрипка здесь