Oracleのいくつかのupdate文の分析


1.単一文更新構文:UPDATE SET = WHERE = 説明:更新されたフィールドにインデックスが追加された場合、更新時にインデックスが再構築され、更新効率が遅くなります.単一テーブルの更新または単純な文は、このスキームを使用するとより優れています.2.ロットデータ更新構文:update a set a. 1 = (select b. 1 from b where a. 2=b. 2) where exists(select 1 from b where a. 2=b. 2)説明:表aのすべてのデータを調べ、各データを循環し、そのデータがexists(select 1 from表b where a.フィールド2=b.フィールド2)条件に合致しているかどうかを検証し、もしそうであれば(select b.フィールド1 from表b where a.フィールド2=b.ワードセグメント2)クエリーを実行し、対応する値更新a.フィールド1を調べる.関連テーブルの更新にはexists(select 1 fromテーブルb where a.フィールド2=b.フィールド2)という条件が必要です.そうしないと、テーブルaの他のデータのフィールド1がnull値に更新されます.3.merge更新フランス語法:mergeはoracle特有の文で、文法は以下の通りです.
MERGE INTO table_name t1
USING (table|view|sub_query) t2
ON (join condition) 
WHEN MATCHED THEN 
    UPDATE table_name 
    SET col1 = col_val1, 
        col2     = col2_val 
WHEN NOT MATCHED THEN 
    INSERT (column_list) VALUES (column_values); 

説明:t 2においてSelectから出たデータは,それぞれt 1とON(join condition)の比較を行い,一致すれば更新の操作(Update)を行い,一致しなければ挿入操作(Insert)を行う.mergeを実行しても影響するローの数は返されません.Merge文の書き方は煩雑で、最大2つのテーブルしか関連付けられず、複雑な文はmergeで更新すると力不足で効率が悪い.2つのテーブルが関連付けられ、更新されたテーブルは、関連テーブルのプライマリ・キーによって関連付けられていないので、このスキームがより優れています.4.ストアド・プロシージャのカーソルを使用して構文を更新するには、次の手順に従います.
begin
for cur in (    ) loop –-  
	--    (           )
end loop; --    
end;

説明:oracleは高速カーソルをサポートし、定義せずにforループにカーソルを書き込むことで、データの一括更新を容易にします.さらにoracleのrowid物理フィールド(oracleは各テーブルにrowidというフィールドがデフォルトであり、一意のインデックスである)を加えると、更新するレコードにすばやくナビゲートできます.高速カーソルを使用するメリットは多く、複雑なクエリー文をサポートし、データがどんなに大きくても更新効率は高くなりますが、実行後は影響行数は返されません.マルチテーブル関連で論理的に複雑な場合は、このスキームがより優れています.
上一篇:Oracle実行時報エラーコードおよび情報次編:oracleデータベースの深さ解析