`
Sehoney
  • 浏览: 41288 次
  • 性别: Icon_minigender_1
  • 来自: 福建
社区版块
存档分类
最新评论

PLSQL与游标使用

阅读更多
declare
declare
n_num number;
--变量赋值
v_char varchar2(30):='gmd';
--常量
c_num constant number:=50;
--属性类型数据
c_type t_user.name%type;
r_row t_user%rowtype;
b_boolean boolean:=true;
--自定义数据类型
type my_type is record(
     mysuser varchar2(30),
     myname varchar2(30)
);
c_my_type my_type;
begin
     --对boolean类型数据赋值
     if b_boolean=true then
        dbms_output.put_line('真值');
     else
        dbms_output.put_line('假值');
     end if;
     --第一种赋值方式
     n_num:=50;
     dbms_output.put_line(n_num);
     --第二种赋值方式
     select suser into v_char from t_user where suser='test9';
     dbms_output.put_line(v_char);
     --给%type类型数据赋值
     select name into c_type from t_user where suser='test9';
     dbms_output.put_line(c_type);
     --给%rowtype类型数据赋值
     select * into r_row  from t_user where suser='test9';
     dbms_output.put_line(r_row.suser||r_row.name);
     --给自定义数据类型赋值
     select suser,name into c_my_type from t_user where suser='test9';
     dbms_output.put_line(c_my_type.mysuser||c_my_type.myname);
end;


case
declare 
n_num number:=15;
begin
     --第一种case用法
     case n_num 
          when 10 then
               dbms_output.put_line('第一个case');
          when 20 then
               dbms_output.put_line('第二个case');
          else
              dbms_output.put_line('没了');
     end case;
     --第二种case用法
     case 
          when n_num<10 then
               dbms_output.put_line('小于10');
          when n_num>10 and n_num<20 then 
               dbms_output.put_line('大于10小于20');
          else 
               dbms_output.put_line('未知数');
     end case;
end;


隐式游标
declare
begin 
  update t_user set name='龚帅2' where suser='test9';
  if sql%found then
     dbms_output.put_line(sql%rowcount);
  elsif sql%notfound then
        dbms_output.put_line('没有影响');
  end if;
  commit;
end;


显示游标
declare
  s_str varchar2(10):='test9';
  r_row t_user%rowtype;
  cursor my_cursor(ssuser varchar2,nname varchar2) is
    select *
      from t_user
     where suser=ssuser and name=nname;
begin
       open my_cursor(s_str,'龚帅');
       loop
            fetch my_cursor into r_row;
            exit when my_cursor%notfound;
            dbms_output.put_line(r_row.suser);
            dbms_output.put_line(r_row.name);
       end loop;
       close my_cursor;
end;


更新游标
-----指向单表的游标-----
declare
cursor mycursor is
       select * from t_user for update;
begin
     for myrow in mycursor
     loop
         dbms_output.put_line(myrow.name);
         update t_user set name=myrow.name||'1' where current of mycursor;
     end loop;
     commit;
end;


------指向关联查询的游标【for update of 列名】------
/*
  更新游标注意点
  1.通过游标更新行 for update【of 列名】必须和where current of cursor 配套使用。
  2.【of 列名】主要用在指向多表关联的游标中,单表的游标默认锁定。
  2.of后是执行要进行锁定表的列【任意一列即可】
  3.游标指向关联查询的结果集时,必须指明进行锁定的表【要进行更新的表】,
        如果未指定锁定表,将无法更新数据。
  4.如果指定了其中A表的锁,更新B表,出错【01410 无效的rowid】。
*/

declare
cursor mycursor is
       select name,remark from t_user a,user_role b
       where a.suser=b.suser for update of name;
begin
     for myrow in mycursor
     loop
         dbms_output.put_line(myrow.name);
         dbms_output.put_line(myrow.remark);
         --指定了锁定的表,即可进行更新
         update t_user set name=myrow.name||'a',remark=myrow.remark||'a' where current of mycursor;
         --如果指定了其中A表的锁,更新B表,出错【01410 无效的rowid】
         --update t_user_address set addressname='qwe' where current of mycursor;
     end loop;
     commit;
end;


for 游标
declare
cursor my_cursor is
       select * from t_user;
begin
     for my_row in my_cursor
     loop
         dbms_output.put_line(my_row.name);
     end loop;
end;


ref cursor 动态游标
declare
s_str varchar2(10):='test9';
v_sql varchar2(100);
r_row t_user%rowtype;
type my_cursor is ref cursor;
r_cursor my_cursor;
begin
     v_sql:='select * from t_user where suser=:ssuser';        
     open r_cursor for  v_sql
          using s_str;
     loop
         fetch r_cursor into r_row;
         exit when r_cursor%notfound;
         dbms_output.put_line(r_row.name);
     end loop;
     close r_cursor;
end;
0
0
分享到:
评论

相关推荐

    学习及练习PLSQL-游标遍历

    游标提供了一种对从表中检索出的数据进行操作的灵活手段,就本质而言,游标实际上是一种能从包括多条数据记录的结果集中每次提取一条记录的机制。

    福建省电力公司oracle培训教材--PLSQL之游标与异常处理

    福建省电力公司oracle培训教材--PLSQL之游标与异常处理

    Oracle PLSQL游标的学习

    游标 for 循环是一种快捷使用游标的方式,它使用 for 循环依次读取结果集中的行数据,当 for 循环开始时,游标自动打开,不需要 open 语句,每循环一次系统自动读取游标当前行的数据,不需要 fetch 语句,当退出 for...

    PLSQL 存储过程 游标使用

    PLSQL 存储过程 语法

    plsql基础(游标)

    #### 三、游标的声明与使用 ##### 3.1 声明游标 声明游标的基本语法如下: ```plsql DECLARE CURSOR c_name IS SELECT column_list FROM table_name WHERE condition; BEGIN -- 执行逻辑 END; ``` 其中,`c...

    Oracle_T6_PLSQL与游标.sql

    OraclePL/SQL练习,基本的OraclePL/SQL的语法,游标的在PL/SQL中的使用,如何声明游标,打开游标,提取记录,关闭游标。

    plsql游标、集合简单使用

    oracle数据库里plsql游标、集合及对象的简单使用,适合初学者查看

    PLSQL游标编程培训内含实例

    通过PLSQL游标编程,我们可以实现更灵活的数据处理,比如循环处理结果集、条件判断等。在实际开发中,游标尤其适用于那些需要逐行处理大量数据的情况,例如批量更新或删除。 在"PLSQL培训内容"这个压缩包中,可能...

    Oracle_PLSQL游标的学习

    * PL/SQL 记录并不保存在数据库中,它与变量一样,保存在内存空间中,在使用记录时候,要首先定义记录结构,然后声明记录变量。 * 可以把 PL/SQL 记录看作是一个用户自定义的数据类型。 在 PL/SQL 中使用游标可以...

    PLSQL中显示游标使用的4个步骤

     显式游标处理需四个 PLSQL步骤:  1、定义/声明游标:是定义一个游标名,以及与其相对应的SELECT 语句。  格式:  CURSOR cursor_name[(parameter[, parameter]…)]  [RETURN datatype]  IS  ...

    Oralce PLSQL存储过程之游标实践!

    通过以上实例,我们了解了在PL/SQL存储过程中使用游标的多种方式,包括简单的单值输出、遍历游标、带参数的游标以及使用多个游标进行复杂的数据处理。掌握这些技术将有助于开发出更加高效和健壮的应用程序。

    plsql 游标 英文讲义

    显式游标的使用使得程序能够控制如何以及何时提取数据,而不必一次性地返回所有结果集,这对于优化性能和资源使用是非常有用的。显式游标同样支持带有参数的游标,允许程序员在声明时定义参数,以便在运行时向游标...

    PLSQL使用游标

    PLSQL 学习! 一个ppt文档! 可以参考一下!

    PLSQL编程(游标).docx

    8. **显式游标与隐式游标的比较** - 显式游标提供了更多的控制,如循环、处理多行数据等。 - 隐式游标主要用于简单的DML操作,不需要手动打开、关闭,但只能处理一条记录。 总结来说,PL/SQL中的游标是处理查询...

    整理:oracle pl/sql 入门+ 数组使用+游标+动态SQL

    在这个“整理:Oracle PL/SQL 入门+数组使用+游标+动态SQL”文档中,我们将深入探讨这四个关键概念。 1. Oracle PL/SQL入门: - PL/SQL的基本结构:PL/SQL由声明部分、执行部分和异常处理部分组成,用于定义变量、...

    Oracle数据库实验-PLSQL游标、过程、函数、包的使用[文].pdf

    在本次实验中,我们将重点探讨PL/SQL中的游标、过程、函数和包的使用,这些都是数据库开发中不可或缺的部分。 首先,让我们了解PL/SQL中的游标。游标是一种在结果集中定位并移动的机制,它允许我们逐行处理查询结果...

    PLSQL中文详细使用教程 有标签可快速定位

    1. 变量与常量:PLSQL中的变量用于存储数据,常量则不可更改。声明变量时,需要指定数据类型,如NUMBER、VARCHAR2等。 2. 控制结构:包括IF-THEN-ELSE、CASE语句用于条件判断,WHILE和FOR循环用于迭代执行。 3. 子...

    Oracle PLSQL语言初级教程之游标

    PL/SQL中的查询通常与`INTO`子句结合使用,以便将查询结果存储到预定义的变量中。例如,`SELECT`语句的`INTO`语法如下: ```sql SELECT [DISTINCT|ALL]{*|column[,column,...]} INTO (variable[,variable,...] |...

    oracle游标使用大全3

    ### Oracle游标使用详解 #### 一、Oracle游标简介 在Oracle数据库中,游标是一种用于处理查询结果集的强大工具。它允许用户通过循环结构逐行读取数据,并进行相应的处理。游标分为显式游标和隐式游标两种类型。 -...

Global site tag (gtag.js) - Google Analytics