PL/SQL中的游标

PL/SQL中的游标

	1、逐行处理查询结果,以编程的方式访问数据
	2、游标的类型:隐式游标、显示游标、REF游标(REF 游标用于处理运行时才能确定的动态 SQL 查询的结果)

常用的几个属性:

  1. %FOUND : SQL 语句影响了一行或多行时为 TRUE
  2. %NOTFOUND : SQL 语句没有影响任何行时为TRUE
  3. %ROWCOUNT : SQL 语句影响的行数
  4. %ISOPEN : 游标是否打开

隐式游标

SQL%ISOPEN : 隐式游标中,当执行sql语句时,游标自动打开。执行完毕之后自动关闭,所以每次查看的时候都是false的


BEGIN
  UPDATE emp SET comm = 200 WHERE empno = 7369;
  IF SQL%NOTFOUND THEN
    DBMS_OUTPUT.put_line('更新失败');
    ELSE
      DBMS_OUTPUT.put_line('已经更新');
      END IF;
  END;
  
 BEGIN
     UPDATE emp SET comm = 200;
      IF SQL%ROWCOUNT!= 0 THEN 
         DBMS_OUTPUT.put_line('更新了' || SQL%ROWCOUNT || '行');
         ELSE
            DBMS_OUTPUT.put_line('未更新');
       END IF;
       IF SQL%ISOPEN THEN
          DBMS_OUTPUT.put_line('打开');
          ELSE
             DBMS_OUTPUT.put_line('关闭');
             END IF;
  END;

显示游标

显示游标的操作过程:
数据库------->打开游标------------>执行sql---------->结果到变量中去--------------->关闭游标
使用的步骤

  1. 定义游标: cursor 游标名称 is select语句
  2. 开启游标: open 游标名称
  3. 使用游标:fetch 游标名称 into 变量列表
  4. 关闭游标: close 游标名称
/*不带参数的显示游标*/
  DECLARE
             emp_empno emp.empno%TYPE; 
             emp_ename emp.ename%TYPE;
             CURSOR emp_cur IS   --定义游标
                    SELECT empno,ename FROM emp; 
  BEGIN
              OPEN emp_cur; --开启游标
              LOOP
                FETCH emp_cur INTO emp_empno,emp_ename; --使用游标
                EXIT WHEN emp_cur%NOTFOUND;
                DBMS_OUTPUT.PUT_LINE(emp_cur%ROWCOUNT || ':姓名:'||emp_ename || ',编号:'||emp_empno);
               END LOOP;
               CLOSE emp_cur;--关闭游标
    END;

/*带参数的显示游标*/
 DECLARE
    emp_name emp.ename%TYPE;
    emp_sal emp.sal%TYPE;
    emp_deptParam emp.deptno%TYPE;
    CURSOR emp_cur(emp_deptno NUMBER) IS
           SELECT ename,sal FROM emp WHERE deptno=emp_deptno;
 BEGIN
   emp_deptParam:=&部门编号;
   OPEN emp_cur(emp_deptParam);
     LOOP
       FETCH emp_cur INTO emp_name,emp_sal;
       EXIT WHEN emp_cur%NOTFOUND;
       DBMS_OUTPUT.PUT_LINE(emp_name||' '||emp_sal);
     END LOOP;
   END;

 
 /*使用显示游标更新数据*/
 DECLARE
   src_sal NUMBER;---存之前的工资
   CURSOR emp_cur IS--声明游标
          SELECT sal FROM emp WHERE sal < 3000 FOR UPDATE OF sal;--给对应要操作的行加上行级锁
 BEGIN
   OPEN emp_cur;
   LOOP
       FETCH emp_cur INTO src_sal;--给src_sal赋值
       EXIT WHEN emp_cur%NOTFOUND;
       UPDATE emp SET sal=1.1*src_sal WHERE CURRENT OF emp_cur;--当前遍历到的游标
     END LOOP;
     CLOSE emp_cur;
     COMMIT;
   END;

/*
	使用FOR循环来遍历显示游标【循环游标】
	在for循环的时候,游标自动打开,当for循环结束时,游标自动关闭;
	类似java中增强for循环
*/
 DECLARE
   dept_no emp.deptno%TYPE;
   CURSOR emp_cur(deptparam  NUMBER) IS
          SELECT ename FROM emp WHERE emp.deptno=deptparam ;
 BEGIN
   dept_no := &部门编号;
   FOR myEmp IN emp_cur(dept_no)--类似于java中的增强for循环,
     LOOP
       DBMS_OUTPUT.put_line(myEmp.ename);
       END LOOP;

       IF emp_cur%ISOPEN THEN	--用来判断游标是否开启
       DBMS_OUTPUT.put_line('打开');
       ELSE
           DBMS_OUTPUT.put_line('关闭');
           END IF;
   END;
   

显示游标类似jdbc中prepareStatement执行之后得到ResultSet,通过rs的rs.next()一行一行的变量。fetch类型于pojo.setXXX(rs.getXXX(“xxx”));

显示游标需要手动开启关闭游标。隐式游标自动开启关闭游标,使用SQl%ISOPEN查看的时候永远都是false的。

资源下载链接为: https://pan.quark.cn/s/22ca96b7bd39 在 IT 领域,文档格式转换是常见需求,尤其在处理多种文件类型时。本文将聚焦于利用 Java 技术栈,尤其是 Apache POI 和 iTextPDF 库,实现 doc、xls(涵盖 Excel 2003 及 Excel 2007+)以及 txt、图片等格式文件向 PDF 的转换,并实现在线浏览功能。 先从 Apache POI 说起,它是一个强大的 Java 库,专注于处理 Microsoft Office 格式文件,比如 doc 和 xls。Apache POI 提供了 HSSF 和 XSSF 两个 API,其中 HSSF 用于读写老版本的 BIFF8 格式(Excel 97-2003),XSSF 则针对新的 XML 格式(Excel 2007+)。这两个 API 均具备读取和写入工作表、单元格、公式、样式等功能。读取 Excel 文件时,可通过创建 HSSFWorkbook 或 XSSFWorkbook 对象来打开相应格式的文件,进而遍历工作簿中的每个 Sheet,获取行和列数据。写入 Excel 文件时,创建新的 Workbook 对象,添加 Sheet、Row 和 Cell,即可构建新 Excel 文件。 再看 iTextPDF,它是一个用于生成和修改 PDF 文档的 Java 库,拥有丰富的 API。创建 PDF 文档时,借助 Document 对象,可定义页面尺寸、边距等属性来定制 PDF 外观。添加内容方面,可使用 Paragraph、List、Table 等元素将文本、列表和表格加入 PDF,图片可通过 Image 类加载插入。iTextPDF 支持多种字体和样式,可设置文本颜色、大小、样式等。此外,iTextPDF 的 TextRenderer 类能将 HTML、
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值