`
yanghuidang
  • 浏览: 914159 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

[Oracle]高效的PL/SQL程序设计(六)--%ROWTYPE的使用

 
阅读更多

本系列文章导航

[Oracle]高效的PL/SQL程序设计(一)--伪列ROWNUM使用技巧

[Oracle]高效的PL/SQL程序设计(二)--标量子查询

[Oracle]高效的PL/SQL程序设计(三)--Package的优点

[Oracle]高效的PL/SQL程序设计(四)--批量处理

[Oracle]高效的PL/SQL程序设计(五)--调用存储过程返回结果集

[Oracle]高效的PL/SQL程序设计(六)--%ROWTYPE的使用

在PL/SQL程序中, 我们会遇到需要先从一个结果集中取出若干记录, 然后对每一条记录进行处理的情况, 最理想的做法是在一条SQL语句中完成, 但有时候因为需求的关系所以不一定能实现, 所以我们通常会定义几个变量, 然后对结果集做循环, 赋值给变量. 最典型的就是select XX into XX。我们也可以用定义一个记录%rowtype的方法, 减少不必要的代码量, 还能避免由于表中字段的变更造成的错误。示例如下:

创建测试表:

createtablet1asselect*fromuser_tables

创建PACKAGE HEAD:

createorreplacepackageType_demois

procedureprocess1(p_recordint1%rowtype);
procedureprocess_data(p_inputsinvarchar2);

endType_demo;

创建PACKAGE BODY:

createorreplacepackagebodyType_demois

procedureprocess1(p_recordint1%rowtype)
as
begin
dbms_output.put_line(p_record.tablespace_name);
end;

procedureprocess_data(p_inputsinvarchar2)
as
begin
forxin(select*fromt1wheretable_namelikep_inputs)
loop
process1(x);
endloop;
end;

endType_demo;

上面的例子得到的是整个表的记录类型, 如果想要得到某几个列的记录类型, 可以按照如下做法:

createorreplacepackageType_demois

cursortemplate_cursor
isselecttable_name,tablespace_namefromt1;

--typercisrefcursor;

procedureprocess2(p_recordintemplate_cursor%rowtype);
procedureprocess_data(p_cnameinvarchar2,p_inputsinvarchar2);
endType_demo;
createorreplacepackagebodyType_demois

procedureprocess2(p_recordintemplate_cursor%rowtype)
as
begin
dbms_output.put_line(p_record.tablespace_name);
end;

procedureprocess_data(p_cnameinvarchar2,p_inputsinvarchar2)
as
--l_cursorrc;
l_cursorsys_refcursor;
l_rectemplate_cursor
%rowtype;
begin
openl_cursor
for
'selecttable_name,tablespace_namefromt1where'||p_cname||'like:x'usingp_inputs;
loop
fetchl_cursorintol_rec;
exitwhenl_cursor%notfound;
process2(l_rec);
endloop;
end;

endType_demo;

注:还有一个获得列的数据类型%TYPE

l_tablenamet1.tablename%type;
select XX into l_tablename from t1 where...

博文来源:http://blog.csdn.net/huanghui22/archive/2007/05/24/1624358.aspx

分享到:
评论

相关推荐

    Oracle PL/SQL中如何使用%TYPE和%ROWTYPE

    Oracle PL/SQL中如何使用%TYPE和%ROWTYPE

    oracle存储过程、游标、函数、PL/SQL块

    包含oracle存储过程的增、删、查、改 %type、%rowtype的使用 自定义函数 PL/SQL块

    PL/SQL 基础.doc

    PL/SQL 基础,一个不错的 PL/SQL 参考手册。内容预览: ---- 第一章 PL/SQL 简介 ---- 1. Oracle应用编辑方法概览 1) Pro*C/C++/... : C语言和数据库打交道的方法,比OCI更常用; 2) ODBC 3) OCI: C语言和...

    C# 访问Oracle示例+PL/SQL+存储过程+触发器 完整示例 测试可用 易懂

    C# 访问Oracle示例+PL/SQL+存储过程+触发器 完整示例 测试可用 --PL/SQL基础1 declare begin dbms_output.('不输出不换行'); dbms_output.put_line('输出并换行'); end; --PL/SQL基础2 declare dig number(20,...

    Oracle数据库实验--PL/SQL程序基础1

    4、接收雇员号,输出该雇员的所有信息,...(用%rowtype实现)。(存储过程) 7、输入部门编号,按照下列加薪比例执行给该部门的雇员加薪(用CASE实现,修改emp1表的数据) (存储过程) 13、输出如下九九乘法表。(存储过程)

    oracle学习资料

    第一章 PL/SQL 程序设计简介 4 §1.2 SQL与PL/SQL 4 §1.2.1 什么是PL/SQL? 4 §1.2.1 PL/SQL的好处 4 §1.2.2 PL/SQL 可用的SQL语句 5 §1.3 运行PL/SQL程序 5 第二章 PL/SQL块结构和组成元素 6 §2.1 PL/SQL块 6 ...

    plsql_oracle 编程

    第一章 PL/SQL 程序设计简介 4 §1.2 SQL与PL/SQL 4 §1.2.1 什么是PL/SQL? 4 §1.2.1 PL/SQL的好处 4 §1.2.2 PL/SQL 可用的SQL语句 5 §1.3 运行PL/SQL程序 5 第二章 PL/SQL块结构和组成元素 6 §2.1 PL/SQL块 6 ...

    plsql_oracle 8i 编程讲义

    第一章 PL/SQL 程序设计简介 4 §1.2 SQL与PL/SQL 4 §1.2.1 什么是PL/SQL? 4 §1.2.1 PL/SQL的好处 4 §1.2.2 PL/SQL 可用的SQL语句 5 §1.3 运行PL/SQL程序 5 第二章 PL/SQL块结构和组成元素 6 §2.1 PL/SQL块 6 ...

    Oracle8i_9i数据库基础

    第十一章 PL/SQL 程序设计简介 231 §11.1 概述 231 §11.2 SQL与PL/SQL 231 §11.2.1 什么是PL/SQL? 231 §11.2.1 PL/SQL的好处 232 §11.2.1.1 有利于客户/服务器环境应用的运行 232 §11.2.1.2 适合于客户环境 ...

    oracle教案(doc)+SQL Reference 10g(chm).rar

    oracle教案(doc) 1. oracle安装及基本命令 1 1.1 oracle简介 1 1.2 oracle安装 1 1.2.1 常见版本 1 1.2.2 安装: 2 1.2.3 oracle必须启动的服务 2 1.3 oracle常见的第三方工具 4 2. SQL/PLUS 5 2.1 命令行方式 5 2.2 ...

    精髓Oralcle讲课笔记

    ------------------------/组函数(共5个):将多个条件组合到一起最后只产生一个数据------min() max() avg() sum() count()----------------------------/ 51、select count(*) from emp; --求出表中一共有多少条...

    精通SQL--结构化查询语言详解

    2.4.2 pl/sql程序结构 33 第3章 创建、修改和删除表 37 3.1 表的基础知识 37 3.1.1 表的基本结构 37 3.1.2 表的种类 38 3.2 sql数据类型 39 3.2.1 字符型数据 39 3.2.2 数字型数据 40 3.2.3 日期数据类型 41...

    PLSQL编程03

    PL/SQL基础编程之(三)[自定义复合变量][%TYPE和%ROWTYPE的应用]

    SQL21日自学通

    使用SQL 来生成SQL 语句的目的351 几个SQL*PLUS 命令352 SET ECHO ON/OFF353 SET FEEDBACK ON/OFF353 SET HEADING ON/OFF 353 SPOOL FILENAME/OFF353 START FILENAME354 ED FILENAME354 计算所有的表中的行数354 为...

    数据库基础

    第十一章 PL/SQL 程序设计简介 231 §11.1 概述 231 §11.2 SQL与PL/SQL 231 §11.2.1 什么是PL/SQL? 231 §11.2.1 PL/SQL的好处 232 §11.2.1.1 有利于客户/服务器环境应用的运行 232 §11.2.1.2 适合于客户环境 ...

    Oracle 10g 开发与管理

    7.1 PL/SQL 程序结构 56 1.PL/SQL块结构 56 2.PL/SQL块的分类(按照特性划分) 56 7.2变量与常量 56 (一)PL/SQL标识符 (给变量命名) 56 (二)标量变量 56 1.PL/SQL标识符 56 2.变量声明(名称、类型、值) 57 3...

    精通SQL 结构化查询语言详解

    《精通SQ:结构化查询语言详解》全面讲解SQL语言,提供317个典型应用,读者可以随查随用,针对SQL Server和Oracle进行讲解,很有代表性。 全书共包括大小实例317个,突出了速学速查的特色。《精通SQ:结构化查询语言...

    Oracle中的游标和函数详解

     此时使用 ROWTYPE 类型,此类型表示可以把一行的数据都装进来。 例如:查询雇员编号为 7369 的信息(肯定是一行信息)。 例:查询雇员编号为 7369 的信息(肯定是一行信息)。 DECLARE eno emp.empno

    oracle文档

    oralce公司讲义 partner solution PLSQL Developement

    21天学习SQL V1.0

    21天学习SQL V1.0.pdf 66 SQL 21 日自学通(V1.0) 翻译人笨猪 EMAIL wyhsillypig@163.com 2 日期/时间函数.........................................................................................................

Global site tag (gtag.js) - Google Analytics