обновить столбец таблицы из представления в другой базе данных в oracle sql разработчику - PullRequest
0 голосов
/ 12 марта 2020

У меня есть 2 базы данных в oracle.

DATABASE           TABLE/VIEW NAME

digidb1          CUSTOMER_REFERENCE

digidb2           CUST_REF_VIEW

этот запрос будет отображать все данные в таблице CUSTOMER_REFERENCE из db digidb1.

select * from CUSTOMER_REFERENCE

cust_id    brch_code     cust_name         description
001        001           COMPANY TEST 1    TEST COMPANY 1
002        002           COMPANY TEST 2    TEST COMPANY 2
003        003           COMPANY TEST 3    TEST COMPANY 3

этот запрос отобразит все данные в представлении CUST_REF_VIEW из db digidb2.

select * FROM CUST_REF_VIEW

WINBBN      CUSTFULLNAME       ISINDIVIDUAL         MRGDATE
1234        COMPANY TEST 1        N                 12-03-20
4567        COMPANY TEST 4        N                 12-03-20
8901        COMPANY TEST 2        N                 11-03-20
2345        COMPANY TEST 5        Y                 10-03-20
6789        COMPANY TEST 3        N                 12-03-20

возможно ли обновить таблицу (CUSTOMER_REFERENCE) из базы данных (digidb1) этими данными? Я хочу обновить столбец cust_id в CUSTOMER_REFERENCE из digidb1. данные будут получены из представления CUST_REF_VIEW digidb2.

условие для обновления:

  1. CUSTFULLNAME равно cust_name

  2. MRGDATE равен системной дате / сегодня (12-03-20)

  3. ISINDIVIDUAL равен N.

мой ожидаемый результат :

cust_id    brch_code      cust_name         description
1234       001           COMPANY TEST 1    TEST COMPANY 1
002        002           COMPANY TEST 2    TEST COMPANY 2
6789       003           COMPANY TEST 3    TEST COMPANY 3

1 Ответ

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

Если я вас правильно понял, вы на самом деле не хотите обновлять что-либо, а выбирают данные из этих двух представлений, соединяя их, используя определенные условия. Если это так, то:

SQL> with
  2  -- sample data
  3  customer_reference (cust_id, brch_code, cust_name, description) as
  4    (select '001', '001', 'CT1', 'TC1' from dual union all
  5     select '002', '002', 'CT2', 'TC2' from dual union all
  6     select '003', '003', 'CT3', 'TC3' from dual
  7    ),
  8  cust_ref_view (winbbn, custfullname, isindividual, mgrdate) as
  9    (select '1234', 'CT1', 'N', date '2020-03-12' from dual union all
 10     select '4567', 'CT4', 'N', date '2020-03-12' from dual union all
 11     select '8901', 'CT2', 'N', date '2020-03-11' from dual union all
 12     select '2345', 'CT5', 'Y', date '2020-03-10' from dual union all
 13     select '6789', 'CT3', 'N', date '2020-03-12' from dual
 14    )
 15  -- query you need
 16  select case when     v.mgrdate = trunc(sysdate)
 17                   and v.isindividual = 'N'
 18                   then v.winbbn
 19              else r.cust_id
 20         end cust_id,
 21         --
 22         r.brch_code, r.cust_name, r.description
 23  from customer_reference r join cust_ref_view v on v.custfullname = r.cust_name;

CUST BRC CUS DES
---- --- --- ---
1234 001 CT1 TC1
002  002 CT2 TC2
6789 003 CT3 TC3

SQL>

Теперь, в зависимости от того, что вы на самом деле называете «база данных», может быть задействована ссылка на базу данных , если это действительно разные базы данных, например

from customer_reference r join cust_ref_view@db_link_digidb2 v
                                            ----------------
                                            this 

Если речь идет о разных пользователях (схемах) в одной и той же базе данных, вам необходимо предоставить (как минимум) SELECT привилегию от одного пользователя другому. Это также означает, что вам нужно предшествовать удаленному имени представления его имени владельца, например

from customer_reference r join digidb2.cust_ref_view v
                               --------
                               this 

или - более простой вариант - для создания синонима в одной схеме, которая будет указывать на просмотр в другой схеме. В этом случае строка # 23 в запросе, который я разместил, будет выглядеть точно так же.

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