• PLSQL操作


    游标

    SQL> set serveroutput on
    SQL> DECLARE
      2    --定义游标,因为该游标中的数据需要更新,所以使用for update
      3    CURSOR cur_test1 IS
      4      SELECT *
      5        FROM test1
      6         FOR UPDATE;
      7    --定义记录类型,使用锚定。这样表test1变化时,不需要修改程序
      8    rec_test1 test1%ROWTYPE;
      9  BEGIN
     10    OPEN cur_test1;
     11    LOOP
     12      FETCH cur_test1 INTO rec_test1;
     13      EXIT WHEN cur_test1%NOTFOUND;
     14      --更新游标指针目前指向的test1的数据,使用current of cur_test1
     15      UPDATE test1
     16         SET a = a + 10
     17       WHERE CURRENT OF cur_test1;
     18    END LOOP;
     19    CLOSE cur_test1;
     20    COMMIT;
     21
     22    --我们使用隐式游标再打开一次,把结果显示出来看看
     23    FOR rec_test1_2 IN ( SELECT * FROM test1 ) LOOP
     24      dbms_output.put_line(rec_test1_2.a);
     25    END LOOP;
     26  END;

    2 rowid 

    pl/sql的主要功能是处理表中的数据,效率的提高主要是在数据的查询上。我们已经知道索引可以提高查询效率。那么,索引的原理是什么呢?

    例如,创建表employee(first_name varchar2, last_name varchar2),并在employee.last_name上创建索引ind_e1。我们可以把索引ind_e1看做是另外一张表,它包含2列(last_name, rowid)。

    我们发出的sql:
    update employee set first_name='h' where last_name='g';
    先从索引ind_e1上查询到该行的rowid,然后再根据rowid直接定位到该行数据所在的数据块和行。

    那么很明显,我们直接使用rowid作为查询条件,会比使用索引有更高的执行效率,因为这样会跳过从索引中查询rowid的步骤。下面是一个图示:
     
  • 相关阅读:
    服务器与本地时间的倒计时
    没有花括号(大括号)的for循环也能正确执行
    js瀑布流效果
    AQS详解(AbstractQueuedSynchronizer)
    SimpleDateFormat的线程安全问题与解决方案
    jvm不打印异常栈
    Java中的序列化Serialable高级详解
    java梳理-序列化与反序列化
    AQS详解
    对ConditionQueue和锁的理解
  • 原文地址:https://www.cnblogs.com/wwwfj/p/3971430.html
Copyright © 2020-2023  润新知