在oracle sql developer中从另一个数据库的视图更新表列
我在oracle中有2个数据库在oracle sql developer中从另一个数据库的视图更新表列,sql,oracle,Sql,Oracle,我在oracle中有2个数据库 DATABASE TABLE/VIEW NAME digidb1 CUSTOMER_REFERENCE digidb2 CUST_REF_VIEW 此查询将显示来自db digidb1的表CUSTOMER_REFERENCE中的所有数据 select * from CUSTOMER_REFERENCE cust_id brch_code cust_name descri
DATABASE TABLE/VIEW NAME
digidb1 CUSTOMER_REFERENCE
digidb2 CUST_REF_VIEW
此查询将显示来自db digidb1的表CUSTOMER_REFERENCE中的所有数据
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
此查询将显示来自db digidb2的视图CUST_REF_视图中的所有数据
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
是否可以使用此数据从数据库(digidb1)更新表(CUSTOMER_REFERENCE)?
我想从digidb1更新CUSTOMER_引用中的cust_id列。数据将来自digidb2的视图CUST_REF_
更新的条件是:
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
如果我理解正确的话,您实际上并不想更新任何内容,而是通过使用特定条件将这两个视图合并来从中选择数据。如果是这样,那么:
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
如果同一数据库中的用户(模式)几乎不同,那么您需要从一个用户向另一个用户授予(至少)选择
权限。这还意味着您需要在远程视图名称之前加上其所有者名称,例如
from customer_reference r join digidb2.cust_ref_view v
--------
this
或者-一个更简单的选项-在一个模式中创建一个同义词,该同义词将指向另一个模式中的视图。在这种情况下,我发布的查询中的第23行看起来完全一样。在Oracle中,您只能更新可更新的视图。更准确地说,每个视图都有可更新和不可更新的列。您可以在字典中检查要更新的列是否可更新。对不起。我编辑了我的帖子。我把结果弄乱了。应该是另一种方式,我真的需要从数据库digidb1.OK更新表CUSTOMER\u REFERENCE的cust\u id列;只需重写选择以更新。