2012-12-26 3 views
0

하나의 데이터베이스에서 NAMETECHNICAL_NAME 열이있는 PRODUCTS 테이블이 있습니다. 두 번째 데이터베이스에다른 데이터베이스의 값을 가진 오라클 업데이트 테이블

내가 열 NAME 테이블 TEMP_PRODUCTS (즉, 1 dB에서 테이블 PRODUCTS 열에 NAME에 상당)과 null이고 그 첫번째 DB로부터 대응 TECHNICAL_NAME 값으로 업데이트되어야 TECHNICAL_NAME있다.

그래서 에 NAME을 사용하여 UPDATE table TEMP_PRODUCTS을 사용해야합니까?

나는 첫 번째 테이블에서 테이블을 내보내고 두 번째 db로 가져 오는 방법으로 솔루션을 피하고자합니다.

어떻게하면됩니까?

+0

업데이트의 DB 서비스 이름을 의미 테이블, 이름을 기반으로 –

답변

1

을 만들기위한 구문을 찾아주세요. 당신은 1 dB 및 dB 2 .And 다음에 가입 사이에 먼저 DB 링크를 작성해야합니다 : -

CREATE DATABASE LINK db1_link 
    CONNECT TO <User Name> IDENTIFIED BY <pwd> 
    USING 'db2'; 

는 DB2는 특급 제품

그런 다음 문을

UPDATE temp_products tp 
    SET technical_name= 
    (SELECT technical_name FROM [email protected]_link p 
     WHERE tp.name = p.name) 
2

가정 :

  • 을 모두 NAMEUNIQUE이다;
  • db2database link이 있고 db1을 가리키고 있습니다.
UPDATE temp_products tp 
    SET technical_name= 
    (SELECT technical_name FROM [email protected] p 
     WHERE tp=name=p.name) 
+0

예 이름은 고유합니다. 'bd1에서 bd1을 가리키는 데이터베이스 링크가 있습니까?' SQL을 실행 한 후 SQL 오류가 발생했습니다 : ORA-02019 : 원격 데이터베이스에 대한 연결 설명을 찾지 못했습니다. 02019. 00000 - "원격 데이터베이스에 대한 연결 설명을 찾을 수 없습니다" – gospodin

+0

@ gospodin 앞에서와 같이 마치 : CREATE DATABASE 연결 db1을 usr에 IDENTIFY BY pwd USING connection_string' 연결하십시오. [Oracle Doc] (http://docs.oracle.com/cd/B19306_01/server.102/b14200/statements_5005.htm) – Passerby

+0

데이터베이스 링크를 이해하려면이 문서를 읽으십시오. http://docs.oracle.com/cd/B19306_01/ server.102/b14200/statements_5005.htm, 결과를 테스트 할 수 있도록 업데이트 전에'SET TRANSACTION'을 추가하는 것을 잊지 마십시오. 원하는대로 작동하지 않을 때'ROLLBACK'을, 결과가'COMMIT' 일 때 좋다 –

2

당신은 temp_product 테이블이 자리하고있는 곳, db2에서 아래 쿼리를 실행해야하고, DB 동일한 데이터베이스 db2에 링크 db1db1를 연결할 수 있습니다.

MERGE temp_products tp 
    USING [email protected] pp 
    ON(tp.name = pp.name) 
    WHEN MATCHED THEN 
    UPDATE SET tp.technical_name = pp.technical_name; 

데이터베이스 db2에 db 링크를 만들어 db1에 연결하여 제품 테이블에 액세스해야합니다. 단지 우리가 다른 DB에서 하나의 DB 개체에 액세스 할 수있는 DB 링크를 생성하여 DB 링크

CREATE [PUBLIC] DATABASE LINK <link_name> 
CONNECT TO <user_name> 
IDENTIFIED BY <password> 
USING '<service_name>'; 
관련 문제