2009-11-06 6 views
9

RBARthisにこのリンクを読んだため、RBARの私の理解はこれに金額:ループとカーソル RBAR SQL

  • 基づき設定されていない何かを持って

    1. 何か

    私は誰かがのセットベースのプログラミングが(SQLの文脈の中で)より洗練された説明を持っているかどうかを尋ねていることを少し知っています。

    答えて

    13

    セットベースのプログラミングは、集合の数学的概念に基づいており、一度に1組全体を処理する演算子を備えています。手続き型(RBAR)プログラミングは、従来のコンピュータのファイルおよびレコードの概念に基づいています。だから10%部門Xの全従業員の給与を増加させるために:

    セットベース:

    UPDATE employees SET salary = salary * 1.10 WHERE department = 'X'; 
    

    手続き(極端な例で、擬似コード):手続きにおいて

    OPEN cursor FOR SELECT * FROM employees; 
    LOOP 
        FETCH cursor INTO record; 
        EXIT WHEN (no more records to fetch); 
        IF record.department = 'X' THEN 
         UPDATE employees 
         SET salary = salary * 1.10 
         WHERE employee_id = record.employee_id; 
        END IF 
    END LOOP 
    CLOSE cursor; 
    

    バージョンでは、一度に1つの従業員ローだけが更新されます。セットベースのバージョンでは、「部門Xの従業員のセット」内のすべての行が一度に(関係する限り)更新されます。

    あなたのリンクですでに読んでいるものにこれが何か追加されているのかどうかはわかりませんが、私はそれを見ていました。

    +0

    もちろん、セットベースのバージョンは、通常は多くの場合、通常はさらに高速です。 – HLGEM

    6

    セットベースの処理にループが関与する可能性があることを指摘します。複数のテーブルを束ねるのではなく、複数のテーブルを1セットのプロセスでロードしながらバッチ処理する場合は、レコードのバッチをループすることができます。 1つの巨大な挿入文を実行するよりも、データベースにはるかに良いかもしれません。

    一部のRBARプロセスは、カーソルまたはループのように見えません。これらには、相関サブクエリと多くのユーザー定義関数が含まれます。

    +1

    合意がよく述べられています。 –