RBAR与基于Set的SQL编程

阅读RBAR上的这个链接后,我对RBAR的理解相当于: 任何有循环和游标的东西 任何未设置的东西 我知道这听起来有点完全,这就是为什么我要问是否有人对基于集合的编程是什么有更优雅的解释(在SQL上下文中)。     
已邀请:
基于集合的编程基于集合的数学概念,并且具有一次处理整个集合的运算符。程序(RBAR)编程更多地基于文件和记录的传统计算机概念。因此,要将X部门所有员工的工资提高10%: 基于集合:
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;
在程序版本中,一次只更新一个员工行;在基于集合的版本中,“部门X中的一组员工”中的所有行都会立即更新(就我们而言)。 不确定这会增加你已经在你的链接中读到的东西,但我想我会有机会看到它!     
我将指出基于集合的处理可能涉及循环。如果你想在一个基于集合的进程中加载​​一百万条记录时批量处理而不是捆绑几个表,你可以遍历批量记录,这比一次操作一行的游标更快,对于你的数据库而言,可能比做一个巨大的insert语句要好得多。 有些RBAR进程看起来不像游标或循环。这些将包括相关子查询和许多用户定义的函数。     

要回复问题请先登录注册