您的位置:首页 > 数据库 > Oracle

Oracle 尽量少用循环语句

2015-06-30 13:49 357 查看
-- Start

下面是一个使用循环语句删除表记录的例子。

DECLARE
  TYPE NumList IS TABLE OF NUMBER;
  emps NumList := NumList(10, 30, 70);
BEGIN
  FOR i IN emps.FIRST..emps.LAST LOOP
    DELETE FROM employees WHERE employee_id = emps(i);
  END LOOP;
END;


在你的工作中,千万别写出上面的语句,否则应该毫不犹豫的给自己两个耳光,应该使用批处理的方式,如下:

DECLARE
  TYPE NumList IS TABLE OF NUMBER;
  emps NumList := NumList(10, 30, 70);
BEGIN
  -- FORALL 语句批量执行下面的语句
  FORALL i IN emps.FIRST..emps.LAST
    DELETE FROM employees WHERE employee_id = emps(i);
END;


或使用 TABLE 表达式,如下:

CREATE OR REPLACE TYPE number_table AS TABLE OF NUMBER;

DECLARE
  emps number_table := number_table(10, 30, 70);
BEGIN
  DELETE FROM employees WHERE employee_id IN (SELECT COLUMN_VALUE FROM TABLE(emps));
END;


-- 更多参见:Oracle
SQL 优化精萃


-- 声明:转载请注明出处

-- Last edited on 2015-06-30

-- Created by ShangBo on 2015-06-30

-- End
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: