Как создать оператор вставки, который будет вставлять значения E_PROVIDER_ID (PROV_ID, PROV_NAME, IDENTITY_ID) в E_PROVIDER_MAP, где IDENTITY_ID_TYPE = 125?

Мне нужна вставка для вставки значений из таблицы идентификаторов в таблицу сопоставления, чтобы:

E_PROVIDER_ID.PROV_ID = E_PROVIDER_MAP.I_PROV
E_PROVIDER_ID.E_PROVIDER_ID = E_PROVIDER_ID.IDENTITY_ID
E_PROVIDER_ID.E_PROV_NAME = E_PROVIDER_MAP.I_PROV_NAME
E_PROVIDER_ID.E_PROV_NAME = E_PROVIDER_MAP.E_PROV_NAME

--Создать таблицу идентификаторов

create table E_PROVIDER_ID
(
  PROV_ID          VARCHAR2(50),
  PROV_NAME        VARCHAR2(50),
  ID_LINE#         VARCHAR2(50),
  IDENTITY_TYPE_ID VARCHAR2(50),
  ID_TYPE_NAME     VARCHAR2(50),
  IDENTITY_ID      VARCHAR2(50),
)

- ВСТАВИТЬ ЗНАЧЕНИЯ

insert into E_PROVIDER_ID (PROV_ID, PROV_NAME, ID_LINE#, IDENTITY_TYPE_ID, ID_TYPE_NAME, IDENTITY_ID,)
values ('1005232', 'SMITH, BRIAN EDWARD', '5', '125', 'PROVIDER CODE ID', '020621');
insert into E_PROVIDER_ID (PROV_ID, PROV_NAME, ID_LINE#, IDENTITY_TYPE_ID, ID_TYPE_NAME, IDENTITY_ID,)
values ('1003556', 'SMITH, JOHN STUART', '4', '125', 'PROVIDER CODE ID', '026786');
insert into E_PROVIDER_ID (PROV_ID, PROV_NAME, ID_LINE#, IDENTITY_TYPE_ID, ID_TYPE_NAME, IDENTITY_ID,)
values ('1003595', 'SMITH, RICHARD F.', '5', '125', 'PROVIDER CODE ID', '029091');
insert into E_PROVIDER_ID (PROV_ID, PROV_NAME, ID_LINE#, IDENTITY_TYPE_ID, ID_TYPE_NAME, IDENTITY_ID,)
values ('1003602', 'SMITH, PAUL MATTHEW', '5', '125', 'PROVIDER CODE ID', '029761');
insert into E_PROVIDER_ID (PROV_ID, PROV_NAME, ID_LINE#, IDENTITY_TYPE_ID, ID_TYPE_NAME, IDENTITY_ID,)
values ('1003769', 'SMITH, MARC DROR', '4', '125', 'PROVIDER CODE ID', '029748');
insert into E_PROVIDER_ID (PROV_ID, PROV_NAME, ID_LINE#, IDENTITY_TYPE_ID, ID_TYPE_NAME, IDENTITY_ID,)
values ('1006776', 'SMITH, ULA V.', '6', '125', 'PROVIDER CODE ID', '034415');
insert into E_PROVIDER_ID (PROV_ID, PROV_NAME, ID_LINE#, IDENTITY_TYPE_ID, ID_TYPE_NAME, IDENTITY_ID,)
values ('1006946', 'SMITH, TIMOTHY P.', '7', '125', 'PROVIDER CODE ID', '034687');
insert into E_PROVIDER_ID (PROV_ID, PROV_NAME, ID_LINE#, IDENTITY_TYPE_ID, ID_TYPE_NAME, IDENTITY_ID,)
values ('1007032', 'SMITH, DAVID C.', '7', '125', 'PROVIDER CODE ID', '101754');
commit;

- Создать таблицу карты

create table E_PROVIDER_MAP
(
  I_PROV       NUMBER,
  I_PROV_NAME  VARCHAR2(50),
  E_PROV       NUMBER,
  E_PROV_NAME  VARCHAR2(50),
  I_REC_INST   VARCHAR2(8)
)
0
user3197264 20 Мар 2014 в 20:59

2 ответа

Лучший ответ

Думаю, вам просто нужен синтаксис insert . . . select:

insert into E_PROVIDER_MAP(<columns go here>)
    select PROV_ID, PROV_NAME, IDENTITY_ID
    from E_PROVIDER_ID
    where IDENTITY_ID_TYPE = 125;

Я не могу сразу сказать, каким должен быть список столбцов для таблицы «карта».

РЕДАКТИРОВАТЬ:

На основе вашего комментария и изменения вашего вопроса:

insert into E_PROVIDER_MAP(I_PROV, IDENTITY_ID, I_PROV_NAME, E_PROV_NAME)
    select PROV_ID, E_PROVIDER_ID, E_PROV_NAME, E_PROV_NAME
    from E_PROVIDER_ID
    where IDENTITY_ID_TYPE = 125;

Я действительно отмечаю, что эти столбцы, похоже, не имеют ничего общего с операторами create table в вопросе.

1
Gordon Linoff 20 Мар 2014 в 21:46
Связь вставки, которую я пытаюсь создать, следующая: E_PROVIDER_ID.PROV_ID = E_PROVIDER_MAP.I_PROV E_PROVIDER_ID.E_PROVIDER_ID = E_PROVIDER_ID.IDENTITY_ID E_PROVIDER_ID.E_PROV_NAME = E_PROVIDER_MAP.I_PROV_NAME E_PROVIDER_ID.E_PROV_NAME = E_PROVIDER_MAP.E_PROV_NAME
 – 
user3197264
20 Мар 2014 в 21:14
Позже я обнаружил, что в моем наборе данных есть символы. Столбец, в который он пытался вставить эти символы (IDENTITY_ID), является числовым. После удаления оскорбительной строки символов оператор вставки работал как надо.
 – 
user3197264
21 Мар 2014 в 21:15

Поскольку вы выбираете из таблицы со столбцами VARCHAR, вам нужно выполнить вставку выбора с приведением.

Вставить в E_PROVIDER_MAP (I_PROV, IDENTITY_ID, I_PROV_NAME, E_PROV_NAME) выберите CAST (PROV_ID AS NUMBER), CAST (E_PROV AS NUMBER), I_PROV_NAME, E_PROV_NAME из E_PROVIDER_ID, где IDENTITY_ID_TYPE = 125;

0
user3417074 20 Мар 2014 в 22:08