10

OracleからSybaseにデータを移動するアプリケーションを作成しており、更新/挿入操作を実行する必要があります。OracleではMERGEINTOを使用しますが、Sybaseでは使用できないようです(とにかくASEでは使用できません)。これは複数のステートメントで実行できることは知っていますが、いくつかの理由から、これを1つのステートメントにまとめようとしています。

助言がありますか?

4

6 に答える 6

6

ASE 15.7 にはこの機能があります。

ここでドキュメントを見つけてください: http://infocenter.sybase.com/help/topic/com.sybase.infocenter.dc36272.1570/html/commands/commands84.htm

于 2011-07-04T19:01:18.923 に答える
5

Sybase と DB2 は、IEC/ISO/ANSI SQL 標準に非常に準拠しています。MSは少し少ないです。

オラクルは、標準にまったく準拠していません(用語集に記載されているにもかかわらず)。さらに重要なことは、制限があるため、それらを克服するために使用する方法は、SQL への拡張機能を導入することです (これは、制限のない他の DBMS には必要ありません)。顧客が離れないようにする良い方法です。

そのため、Oracle側で行っていたことをSQL標準で行う方法を学ぶことをお勧めします。そして 2 番目 (最初ではありません) は、Sybase や DB2 (またはその他の) 拡張機能について学びます。

「MERGE」と「UPSERT」は SQL には存在せず、Oracle にのみ存在します。つまり、UPDATE と INSERT を 2 つの別々の操作で実行する必要があります。

SQL では、UPDATE と INSERT は単一のテーブルに適用されます。FROM 句が非常に複雑な場合があります。

「MERGE」の場合、それは単に次のとおりです。

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

更新は単なる補足です。

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

UPDATE では、WHERE 条件をマージしてサブクエリを削除するのは簡単です (説明のために示しています)。

私が理解しているように、Oracleはサブクエリ(標準SQL)の実行が苦手です。これが、これらすべての非標準の「MERGE」などがある理由です。その目的は、他のすべての DBMS が簡単に実行する標準のサブクエリ構文を回避することです。

于 2011-01-19T08:39:32.373 に答える
5

残念ながら、MERGE を使用せずに 1 つのステートメントでテーブルを挿入および更新することはできません。どちらにしても、この記事によると、SQL:2008 の時点で SQL に存在し、Sybase ASE と PostgreSQL を除くほとんどすべての主要なデータベースでサポートされています。

于 2011-01-27T19:49:54.070 に答える
0

INSERTINTOやUPDATEFROMを使用して、いくつかのサブクエリを使用して偽造を試みることもできますが、Oracleほど便利ではありません。

これをコードまたはデータウェアハウスに入れたいですか?クエリの複雑さを隠したい場合は、すべてのSQLをストアドプロシージャにカプセル化することもできるからです。

于 2010-12-26T11:48:39.677 に答える