转:PL/SQL 中的select ..into.. 以及 游标(Cursor)
Select empno, ename from emp;返回的是多于一条数据, 这个是肯定的.但是我们声明两个变量来依次获得每条数据的话, 我们只能获得一条记录,因为他们不是数组.
这种不匹配的现象在电子线路中类似于阻抗不匹配.
如果只是检索一条数据,那么我们可以用
declare
var_empno number(10);
var_ename varchar2(32);
begin
select empno , ename into var_empno, var_ename
from emp
where empno=7369;
DBMS_output.put_line(var_empno);
DBMS_output.put_line(var_ename);
end;
/
这是很简单地检索一条数据的方法.
但是我们稍微改一下:
declare
var_empno number(10);
var_ename varchar2(32);
begin
select empno , ename into var_empno, var_ename
from emp;
DBMS_output.put_line(var_empno);
DBMS_output.put_line(var_ename);
end;
/
这样就会引发异常:-1422
如果再该一下,检索不到数据就回得到100的异常代码.
当然我们可以处理这些异常
When
Condition
Then
Do somethings;
但是如果我们要检索多行数据的每一条数据, 那么单单用
Select * from table; 是不行的.
这里我们就需要用游标.
一个很好的比喻是每次取一点冰块的故事.游标cursor 相当于一个指针,这里没有指向内存,而是指向了一个每次能够取得一条记录的select 语句.
一个在form 里写的post_query(显示完所有的item 进行的)触发:
declare
CURSOR a IS select dname from dept where deptno=:emp.deptno;
a_var varchar2(32);
begin
open a ;
fetch a into a_var;
:emp.department_name:=a_var;
if a%notfound then
:emp.department_name:='error';
end if;
close a;
end;
声明不用说了,要先打开,执行,关闭.
游标的属性
Cursor%notfound
Cursor%found
具体可以查阅pl/sql的api , such as : Knowledge Xpert for PLSQL
这两个属性代表找到/找不到, 是个boolean 值,所有我们可以用if来判断.
关于游标里的局部变量:
a_var varchar2(32);
要知道table所查出的栏位的数据类型, 我们可以让oracle 自己去查到这个类型,用
a%rowtype.写法比较独特.
我们可以理解成select into 是一种隐式cursor
相关推荐
在PL/SQL(Procedural Language/Structured Query Language)中,游标是处理单行或一组数据的关键工具,尤其在数据库编程中。游标允许程序员逐行操作数据集,而不仅仅是整个数据集作为一个整体。本篇文章将深入探讨...
《PL/SQL精通》这本书是针对Oracle数据库管理系统中PL/SQL编程语言的深入学习指南。Oracle SQL是Oracle数据库系统的核心语言,而PL/SQL则扩展了SQL的功能,提供了过程化编程的能力,使得数据库管理和开发更加高效和...
PL/SQL 基础,一个不错的 PL/SQL 参考手册。内容预览: ---- 第一章 PL/SQL 简介 ---- 1. Oracle应用编辑方法概览 1) Pro*C/C++/... : C语言和数据库打交道的方法,比OCI更常用; 2) ODBC 3) OCI: C语言和...
在这个实例精讲中,你将学习如何使用PL/SQL进行数据操作,创建存储过程和函数,以及如何有效地处理错误和事务。通过对"student"数据库模式的实践,你将掌握Oracle数据库管理和应用程序开发的核心技能。通过不断练习...
在PL/SQL中,可以使用显式游标(Explicit Cursor)或隐式游标(Implicit Cursor)。 - 隐式游标是由数据库自动管理的游标,用于处理SELECT语句返回单行数据的情况。 - 显式游标需要用户在PL/SQL代码中声明、打开、...
此外,PL/SQL还有游标(CURSOR),用于逐行处理查询结果。游标通常与FOR循环一起使用,以遍历和操作查询结果集。 最后,PL/SQL中的事务管理也是关键。你可以使用`COMMIT`提交事务,`ROLLBACK`回滚事务,或者`...
根据提供的文件内容,我们可以从中提取到关于PL/SQL语言及其对数据库交互作用的丰富知识点,本知识点详解将围绕以下几个方面展开:PL/SQL基本操作、PL/SQL处理数据库记录、游标(Cursor)的概念及其在PL/SQL中的使用...
在PL/SQL中,你可以编写复杂的数据库应用程序,包括存储过程、函数、触发器、游标和异常处理等。 PL/SQL的语法结构主要由以下部分组成: 1. **声明部分**:在这个部分,我们声明变量、常量、游标、记录类型等。...
PL/SQL支持多种数据类型,包括数值类型(如NUMBER、INTEGER)、字符类型(VARCHAR2、CHAR)、日期时间类型(DATE)、布尔类型(BOOLEAN)以及复合数据类型(如记录、数组)。 三、PL/SQL变量 变量在声明部分定义,...
本篇文章主要探讨PL/SQL的基础知识,包括其结构、变量、条件判断、循环以及异常处理。 PL/SQL块是PL/SQL的基本组成单元,它由声明部分、执行部分和异常处理部分组成。声明部分用于定义变量和常量;执行部分包含SQL...
10. **PL/SQL的性能优化**:了解如何优化SQL查询,减少不必要的磁盘I/O,以及合理使用索引,都是提高PL/SQL程序性能的关键。 通过深入学习和实践这些知识点,您将能够熟练地使用PL/SQL进行数据库编程,实现复杂的...
PL/SQL是Oracle数据库系统中的一个强类型编程语言,它扩展了SQL,使得开发者能够编写复杂的存储过程、函数和触发器。以下是对标题和描述中所提到的知识点的详细解释: 1. **声明变量 (Declaring Variables)** 在...
PL/SQL是Oracle数据库系统中的一个重要组成部分,它是一种结合了SQL与过程编程的语言,用于在Oracle环境中编写存储过程、函数、触发器等数据库对象。本资料主要涵盖了PL/SQL的基本语法以及数据的增删改查操作和视图...
在本文中,我们将深入探讨PL/SQL以及Oracle数据库中的一些常见实用语句。 PL/SQL全称为Procedural Language/Structured Query Language,它是SQL的扩展,增加了过程化编程元素。它允许开发人员编写复杂的业务逻辑,...
- **PL/SQL过程**:编写一个PL/SQL块,使用游标(CURSOR)遍历`USER_TAB_COLUMNS`视图中的数据,提取表名和列名,并插入到`table_tmp`表中。 ### 二、实现步骤详解 #### 1. 创建存储结果的表 ```sql CREATE TABLE ...
- **嵌套SQL**:在PL/SQL块中直接使用SQL语句,如`SELECT INTO`用于将查询结果赋值给变量。 - **动态SQL**:通过字符串拼接生成SQL语句并在运行时执行,如`EXECUTE IMMEDIATE`。 6. **PL/SQL的输入输出** - **...
在PL/SQL中处理显示游标所必需的四个步骤: 1)声明游标;CURSOR cursor_name IS select_statement 2)为查询打开游标;OPEN cursor_name 3)取得结果放入PL/SQL变量中; FETCH cursor_name INTO list_of_...
游标(Cursor)是PL/SQL处理SQL查询结果的重要工具。它可以用于逐行处理查询结果,通常与FOR循环结合使用,例如: ```sql DECLARE cursor_name CURSOR FOR SELECT column1, column2 FROM table_name; var1 ...
PL/SQL是Oracle数据库系统中的一个编程语言,全称为Procedural Language/Structured Query Language,它是SQL的一个扩展,集成了SQL的查询能力与过程性编程语言的控制结构。本压缩包“pl/sql code”中包含的是一些...