• Oracle 遍历变量游标


    背景

            由于我们的数据库系统中的游标特别多,DBA让我们优化,减少游标的使用。

    • 电脑系统:windows
    • 数据库:Oracle
    • 数据库图形化界面工具:Toad,DBeaver(我測試的時候用的)
    • 记录日期:2023-09-04
    具体实现

            在我目前所了解到的数据库中能够实现遍历的有游标(CURSOR)、FOR循环两种方式,不过都要跟loop...end loop;联合使用。

            我这里都用了匿名函数,这些都是可以直接执行的,DBeaver可通過【Ctrl+Shift+O 或者,您可以通过单击“查看服务器输出”】

    游标
    • 优点
      • 可随时打开关闭使用,可全局可局部
    • 缺点
      • 查询了多少变量,就要承接多少
    1. -- 這是一個匿名循環,可以直接執行
    2. DECLARE
    3. var_text VARCHAR(100);
    4. var_value1 VARCHAR(100);
    5. var_value2 VARCHAR(100);
    6. CURSOR GET_VALUE IS
    7. SELECT 'value1', 'value2' FROM dual
    8. UNION ALL
    9. SELECT 'value11', 'value22' FROM dual;
    10. BEGIN
    11. OPEN GET_VALUE;
    12. DBMS_OUTPUT.PUT_LINE('CURSOR循環開始');
    13. LOOP
    14. BEGIN
    15. FETCH GET_VALUE INTO var_value1, var_value2;
    16. EXIT WHEN GET_VALUE%NOTFOUND;
    17. -- var_text:=var_text||''''||var_value1||'''';
    18. var_text := var_value1;
    19. DBMS_OUTPUT.PUT_LINE(var_value1);
    20. /*
    21. *
    22. * 具體實現
    23. *
    24. */
    25. END;
    26. END LOOP;
    27. CLOSE GET_VALUE;
    28. END;
    FOR
    • 优点 
      • 类似代码中的foreach(x in collection)循环,取用也与foreach一样,取用方便
    • 缺点
      • 主要用于局部
      • 像from dual这种的要给定栏位,不然会报错,如果是你自己建的表,一般就不会报错
    1. -- 循环
    2. DECLARE
    3. var_text VARCHAR(100);
    4. var_value1 VARCHAR(100);
    5. var_value2 VARCHAR(100);
    6. BEGIN
    7. DBMS_OUTPUT.PUT_LINE('FOR循环开始');
    8. FOR x IN (
    9. SELECT 'value1' value1, 'value2' value2, 'value3', 'value4', 'value5' FROM dual
    10. UNION ALL
    11. SELECT 'value111', 'value222', 'value333', 'value444', 'value555' FROM dual
    12. UNION ALL
    13. SELECT 'value911', 'value922', 'value933', 'value944', 'value955' FROM dual
    14. )
    15. LOOP
    16. var_value1 := x.value1;
    17. var_value2 := x.value2;
    18. DBMS_OUTPUT.PUT_LINE(var_value1);
    19. EXIT WHEN var_value2 = 'value222';
    20. -- IF var_value1 LIKE 'US%' THEN
    21. -- CONTINUE;
    22. END LOOP;
    23. END;

    总结

            那些优缺点都是我自己用的时候感觉的,这些东西其实有时候也看你如何使用,也有可能是我还没发现好的用法,仅供大家参考。

  • 相关阅读:
    The 2022 ICPC Asia Regionals Online Contest (I)
    leetcode-两数之和
    ELK + filebeat日志解析、日志入库优化 、logstash过滤器配置属性
    Docker的基本操作
    18天读完368页,靠着这份Alibaba面试通关秘籍,成功闯关“字节跳动”
    C语言练习之递归实现n的k次方
    Android Media Framework(一)OpenMAX 框架简介
    建筑模板常见的问题有哪些?
    spring源码解析:元注解功能的实现
    go语法入门1
  • 原文地址:https://blog.csdn.net/qq_41128526/article/details/132663737