2010-12-21 2 views
9

오라클에서 Sybase로 데이터를 이동하는 애플리케이션을 작성 중이며 업데이트/삽입 작업을 수행해야합니다. 오라클에서는 MERGE INTO를 사용 하겠지만 Sybase에서는 사용할 수없는 것 같습니다 (어쨌든 ASE는 아님). 여러 문장으로이 작업을 수행 할 수 있다는 것을 알고 있지만 두 가지 이유 때문에이 작업을 하나의 문장으로 처리하려고합니다.Sybase ASE에서 업 샘플 (업데이트 또는 삽입)합니까?

제안 사항?

답변

0

일부 하위 쿼리로 INSERT INTO 및/또는 UPDATE FROM으로 위조하려고 시도 할 수 있지만 오라클처럼 편리하지는 않습니다.

코드 또는 데이터웨어 하우스에이 작업을 수행 하시겠습니까? 쿼리의 복잡성을 숨기려면 모든 SQL을 저장 프로 시저에 캡슐화 할 수도 있기 때문입니다.

5

Sybase 및 DB2는 매우 IEC/ISO/ANSI SQL Standrd-compliant입니다. 조금 덜 MS.

오라클은 (glossies가 말하는 내용에도 불구하고) 전혀 표준을 준수하지 않습니다. 더 중요한 점은 제한 사항으로 인해이를 극복하기 위해 사용하는 방법은 SQL에 Extension을 도입하는 것입니다 (제한이없는 다른 DBMS에는 필요하지 않음). 고객이 마이그레이션하지 않도록하는 좋은 방법입니다.

그래서 당신에게 가장 좋은 조언은 오라클 쪽에서 무엇을하고 있었는지를 SQL 표준 방식으로 배우는 것입니다. 그리고 Sybases 또는 DB2 (또는 무엇이든) 확장 기능에 대해 알아야합니다.

"MERGE"및 "UPSERT"는 SQL에 존재하지 않으며 오라클에만 존재합니다. 최종선은, 당신은 2 개의 분리되는 가동에서 UPDATE와 INSERT해야한다이다.

SQL에서 UPDATE 및 INSERT는 단일 테이블에 적용됩니다. 상당히 복잡한 FROM 절이있을 수 있습니다. 는 하위 쿼리를 WHERE 조건을 병합하고 제거하기 쉬운이 업데이트에

UPDATE target SET (target_column = source_column, ...) 
    FROM source 
    WHERE primary_key IN (SELECT primary_key FROM target) 

(:

INSERT target (column_list) -- we do have defaults 
SELECT (column_list) 
    FROM source 
    WHERE primary_key NOT IN (SELECT primary_key FROM target) 

업데이트는 단순히 보완 "MERGE"를

, 즉 단순히이다 설명을 위해 당신에게 보여주고 있습니다).

오라클은 Subqueries (Standard SQL)를 실행하는 데 매우 어려움을 알고 있습니다. 그래서 다른 모든 DBMS가 쉽게 수행하는 표준 부질의 구문을 피하는 것이 목적 인이 모든 비표준 "MERGE"등을 가지고있는 이유입니다.

+0

질문에 지적했듯이 개별 Insert 및 Update 문을 사용하여이 작업을 수행하는 방법을 알고 있습니다. 나는 또한 ANSI SQL을 알고있다. 나는 일반적으로 단일 단계에서 프로세스를 수행 할 수있는 방법이나 확장에 대한 제안을 찾고있었습니다. 저는 오라클을 좋아하지는 않지만 몇 가지 상황에서 간단하고 우아한 도구 인 MERGE 문을 발견했습니다. – Ickster

+1

@Ickster. Ok. 그러나 질문은 "single statement"를 물었다.나는 유일한 "방법"을 제공했다. 집합 처리 (여러 행)를 위해 작동합니다. 유일한 다른 "방법"은 저장 프로 시저로 작성하지만 행 처리 (매우 느리게)로 저하됩니다. – PerformanceDBA

4

MERGE를 사용하지 않고 하나의 명령문에 테이블을 삽입하고 업데이트하는 것은 불가능합니다. btw는 article에 따라 SQL : 2008 기준으로 SQL에 존재하며 Sybase ASE 및 PostgreSQL을 제외한 거의 모든 주요 데이터베이스에서 지원됩니다.

4

ASE 15.7에는이 기능이 있습니다.

+0

설명서에 대한 링크가 문서화되어있는 곳이 있습니까? –

+0

http://infocenter.sybase.com/help/topic/com.sybase.infocenter.dc36272.1570/html/commands/commands84.htm – mosheb