`

ME游标管理

阅读更多

1、游标类型

 (1) 隐式游标在PL/SQL中执行DML SQL语句自动创建隐式游标

     隐式游标的属性有:

       %FOUND  -- SQL语句影响了一行或多行市为TRUE

       %NOTFOUND  --SQL语句没有影响任何时为TRUE

       %ROWCOUNT  --SQL语句影响的行数

       %ISOPEN--游标是否打,始终为FALSE

   例如:

   SET SERVEROUTPUT ON

   BEGIN

     update toys set tyoprice=270 where toyid='P005'

     if SQL%FOUND then  --只有DML语句影响一行或多行时,才返回true

       DBMS_OUTPUT.PUT_LINE('表已跟新');

     end if;

   END;

  

    SET SERVEROUTPUT ON

    DECLARE

       v_toyid toys.id%type:='&TOYID';

       v_toyname toys.name%type='&TOYNAME';

    BEGIN

      update toys set name=v_toyname

      where toyid=v_toyid;

       if SQL%NOTFOUND then--只有DML语句不影响任何行时,才返回true

            dbms_output.put_line('bian hao wei zhao dao');

       else

           dbms_output.put_line('biao yi geng xin');

       end if;

    END;

 

    SET SERVEROUTPUT ON

    BEGIN

     update vendor_master

     set venname='Rob Mathew' where vencode='V004';

     dbms_output.put_line(SQL%ROWCOUNT); --返回DML语句影响的行数

    END;

    

  (2)显示游标 用于处理返回多行的查询

    不带参数的游标

    SET SERVER OUTPUT ON

    DECLARE

       my_toy_price toys.toyprice%type;

      CURSOR toy_cur is

         select toyprice from toys where toyprice<250;

    BEGIN

      OPEN toy_cur;

      LOOP

      FETCH toy_cur INTO my_toy_price;

     EXIT WHEN toy_cur%NOTFOUND;

     DBMS_OUTPUT.PUT_LINE('TOYPRICE=:WANJUDANJIAO=:'||my_toy_price);

     END LOOP;

     CLOSE toy_cur;

    END;

     带参数的游标:

   SET SERVEROUTPUT ON

   DECLARE

     desig varchar2(20);

     emp_code varchar2(5);

     empnm varchar2(20);

     CURSOR emp_cur (desigparam varchar2) IS

     SELECT empno,ename from employee where designation=desig;

   BEGIN

     desig:='&desig';

     OPEN emp_cur(desig);

     LOOP

      FETCH emp_cur INTO emp_code,empnm;

      EXIT WHEN emp_cur%notfound;

      dbms_outpu.put_line(emp_code||' ' || empnm);

     END LOOP;

    CLOSE emp_cur;

   END;

    使用显式游标更新行

  允许使用游标删除或更新活动集中的行

  声明游标时必须使用SELECT ...FOR UPDATE 语句

         CURSOR <curosr_name> IS

       SELECT statement FOR UPDATE; 

 

         UPDATE  <table-name>

          SET <set_name>

        WHERE current of <cursor_name>;

 

       DELETE FROM <table_name>

      WHERE current of <corsor_name>;

例如:

   SET SERVEROUTPUT ON

   DECLARE

     new_price NUMBER;

     CURSOR   cur_toy IS

       SELECT  toyprice from toys where toyprice<100

       for update of toyprice;

   BEGIN

      OPEN cur_toy;

     LOOP

        FETCH cur_toy INTO  new_price;

       EXIT WHEN cur_toy%NOTFOUND;

       UPDATE toys

       SET toyprice=1.1*new_price

       WHERE CURRENT OF cur_toy;

   END LOOP;

   CLOSE cur_toy;

   COMMIT;

   END;

 

   循环游标:用于简化游标处理代码

例如:

    SET SERVER OUTPUT ON

    DECLARE

       CURSOR mytoy_cur is

       select toyid,toy_name,toyprice from toys;

    BEGIN

      FOR toy_rec IN mytoy_cur

      LOOP

       DBMS_OUTPUT.PUT_LINE('编号:'||' '||toy_rec.toyid||''

                                               '名称:'||' '||toy_rec.toyname||''

                                                '单价:'||' "||toy_rec.toyprice);

      END LOOP;

    END;

 

  (3)REF游标用于处理运行时才能确定的动态SQL查询的结果(用于处理运行时动态执行的SQL查询)

 

声明强类型的REF游标:

   TYPE my_curtype IS REF CURSOR

     RETURN stud_det%ROWTYPE;

  order_cur my_curtype;

 

声明弱类型的REF游标:

  TYPE my_ctype IS REF CURSOR;

  stud_cur my_ctype;

 

2、使用游标变量执行动态SQL

 

  DECLARE

    r_emp emp%rowtype;

    TYPE c_type IS REF CURSOR;

    cur c_type;

    p_salary number;

  BEGIN

    p_salary:=2500;

    OPEN cur FOR 'select * from emp where sal>:1

                             order by sal desc'

    USING p_salary;

   DBMS_OUTPUT.PUT_LINE('薪水大于'||P_SALARY||'的员工有:_'

   LOOP

    FETCH cur INTO r_emp;

     EXIT WHEN cur%NOTFOUND;

    DBMS_OUTPUT.PUT_LINE('编号:'||r_emp.empno||'姓名:'||r_emp.ename||'薪水:'||r_emp.sal);

   END LOOP;

  CLOSE cur;

_

  END;

3.程序包中的游标

Create or replace package cur_pack as

Cursor ord_cur(vcode varchar2)

Return order_master%rowtype;

Procedure ord_pro(vcode varchar2);

 

SQL> CREATE OR REPLACE PACKAGE BODY cur_pack AS

 CURSOR ord_cur(vcode VARCHAR2)

 RETURN order_master%ROWTYPE IS

 SELECT * FROM order_master WHERE VENCODE=vcode;

 PROCEDURE ord_pro(vcode VARCHAR2) IS

   or_rec order_master%ROWTYPE;

 BEGIN

  OPEN ord_cur(vcode);

  LOOP

    FETCH ord_cur INTO or_rec;

    EXIT WHEN ord_cur%NOTFOUND;

    DBMS_OUTPUT.PUT_LIne(’返回的值为' || or_rec.orderno);

  END LOOP;

 END ord_pro;

END cur_pack;

/

 

分享到:
评论

相关推荐

    游标

    游标在计算机编程中,尤其是数据库管理和Web开发中扮演着重要的角色。在本文中,我们将深入探讨CSS(层叠样式表)中的游标属性,以及它如何影响网页交互体验。 CSS是用于控制网页元素外观和布局的重要工具。游标...

    apple_cursor::red_apple:macOS游标主题

    :red_apple: macOS游标主题 苹果光标 享受具有HiDPI支持的适用于Windows和Linux Cursor主题 :party_popper...在资源管理器中打开macOSBigSur_Windows/ ,然后右键单击install.inf 。 从上下文菜单中单击“安装”,然

    Solutions-For-Show-Me-the-Code:我对 https 中的“Show Me the Code”的解决方案

    在“Solutions-For-Show-Me-the-Code”这个项目中,主要关注的是作者针对“Show Me the Code”挑战的Python...通过阅读“Python 数据库笔记 - MySQL.md”,读者可以深入理解如何在Python环境中有效地管理MySQL数据库。

    北语09考试批次Oracle数据库开发离线作业.pdf

    调用包中的过程如`EXECUTE pack_me.order_proc ('002')`。 - **过程调用**:`order_proc`是一个过程,它接收一个输入参数。调用过程时,需要提供参数值。 4. **Oracle数据库管理**: - **数据库启动与关闭**:...

    Python使用pyodbc访问数据库操作方法详解

    游标对象提供了多种方法来管理与数据库的交互。例如,要执行一个查询操作,可以使用cursor.execute()方法,并通过fetch函数来获取查询结果: ```python cursor = cnxn.cursor() cursor.execute("SELECT user_id, ...

    vb制作登陆界面

    Unload Me Form2.Show ' 登录进入的另一个界面 End If End With ``` 请注意,上述代码示例中的数据库连接和密码处理方式可能不适用于生产环境。在实际应用中,应使用更安全的方式处理敏感信息,如使用参数化...

    sql参考手册

    10. **游标**:游标允许程序逐行处理查询结果,对数据库进行交互式操作。 11. **权限管理**:GRANT和REVOKE语句用于赋予和撤销用户对数据库对象的操作权限。 本参考手册中包含的样本数据文件(如oracle_sample_...

    oracle-自动获得表所有DDL(无缺陷)

    通过游标和动态SQL,可以将临时表中的DDL语句逐条写入到指定的文件中,形成一个完整的DDL脚本。 `read_me.txt`是常见的说明文件,通常包含对整个压缩包内容的简要介绍、使用方法、注意事项等信息。对于这个脚本,...

    ocp11g考题

    - PL/SQL编程:理解PL/SQL块的结构,游标,异常处理,存储过程和函数的创建与调用。 2. 数据库安装与配置: - 安装选项:了解不同的安装类型,如企业版、标准版、个人版等。 - 数据库创建:使用DBCA(Database ...

    用java写的手机简单的功能有电话号码qq号码等功能

    根据提供的信息,我们可以...综上所述,这段代码片段展示了如何使用Java ME进行简单的UI元素定义,以及如何配置和管理Oracle数据库。通过深入理解这些知识点,开发者能够更好地掌握Java ME和Oracle数据库的相关技术。

    2021-2022计算机二级等级考试试题及答案No.19931.docx

    12. 创建游标(Cursor)的正确语法是`DECLARE cursor_name CURSOR FOR select_statement`。 13. HTML中,`&lt;h1&gt;`到`&lt;h6&gt;`表示标题,`&lt;h1&gt;`是最大的标题,`&lt;hl&gt;`不是HTML的标准标签。 14. 字符常量是以单引号包围的...

    精彩编程与编程技巧-用MDB文件做密码库...

    - **设置游标位置**:`CursorLocation` 属性设置为 `adUseServer`,表示记录集的游标位于服务器上。 - **打开记录集**:使用 `Open` 方法打开记录集,参数分别指定了SQL语句、连接对象、记录集类型、锁定类型和命令...

    数据库增删查改.rar

    在Android应用开发中,数据库是存储和管理应用程序数据的关键组件。本资料“数据库增删查改.rar”聚焦于Android中的SQLite数据库,这是Android系统默认支持的关系型数据库,用于实现应用程序的本地数据存储。SQLite...

    facebook 开发api

    安装PHP Facebook SDK通常通过Composer完成,Composer是PHP的依赖管理工具。在项目根目录下,运行`composer require facebook/php-sdk-v4`命令,即可将SDK添加到项目中。接着,你需要设置SDK的访问令牌和应用配置,...

    JAVA调用存储过程

    除了简单的存储过程调用外,还可以创建包含游标的存储过程,并通过包来管理这些存储过程。例如: 1. **创建包**: ```sql CREATE OR REPLACE PACKAGE TEST_PACKAGE AS TYPE Test_CURSOR IS REF CURSOR; END ...

    Tkinter 8.4 reference:a GUI for Python

    button = tk.Button(root, text="Click me!", command=on_click) button.pack() ``` #### 7. Canvas 小部件 Canvas 小部件提供了一个绘图区域,可以在其中绘制图形元素。它支持多种图形对象,如弧形、位图、图像、...

    将图片保存到数据库!

    7. **标签“Access.SavePicture”关联的知识**:在描述中提到的"Access"可能是指Microsoft Access,这是一个关系型数据库管理系统。在Access中,`SavePicture`是VBA(Visual Basic for Applications)的一个方法,...

    Pytho_CRUD:Aprendiendo Python和BBDD

    在本课程"Pytho_CRUD:Aprendiendo Python和BBDD"中,我们将深入学习如何使用Python语言...在后续的学习中,你还会了解到事务管理、存储过程、数据库设计原则等更高级的主题,从而全面提升你的Python数据库编程能力。

    cx_Oracle5.1新特性

    4. **数据库API扩展**:cx_Oracle除了提供基本的数据库访问功能外,还添加了一些针对Oracle特定特性的扩展,使得开发者能够充分利用Oracle数据库的功能,比如PL/SQL的执行,游标操作,事务管理等。 5. **性能和稳定...

    工程硕士学位论文 基于Android+HTML5的移动Web项目高效开发探究

    其中使用Struts作为系统的整体基础架构,负责MVC的分离,在Struts框架的模型部分,控制业务跳转,利用Hibernate框架对持久层提供支持,Spring做管理,管理Struts和Hibernate。 WebStorage HTML新增的本地存储解决...

Global site tag (gtag.js) - Google Analytics