`
Johnny_GZ
  • 浏览: 176841 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Oracle中%TYPE和%ROWTYPE说明

 
阅读更多
1. 使用%TYPE

在许多情况下,变量应该拥有与表列相同的类型。例如,emp表的name列的类型为VARCHAR2(20),我们可以使用硬编码写法声明一个变量:

DECLARE

       var_Name VARCHAR2(20);

这样可以实现,但是如果name列的定义改变了,比如将name字段的类型变为VARCHAR2(50),那就会导致所有使用这个变量的PL/SQL代码都必须进行修改。而且如果你有很多的PL/SQL代码,这种处理可能是灰常繁琐和容易出错的,这时,你可以使用”%TYPE”属性这种类型硬性编码,类似在java开发中,我们习惯将一些常量进行固定的定义,比如public static final String arg = 'Your Name';

例如:

DECLARE

       var_name emp.name%TYPE;

   通过使用%TYPE,var_name变量将同emp表的name列的类型绑定,这样每次匿名块、命名块或者存储过程运行该语句块以及编译存储对象(过程、函数、包、对象类和触发器)时都会确定该对象类型,即使表定义修改,这里也可以一样使用。

   使用%TYPE是一种非常好的编程风格,因为它使得PL/SQL更加灵活,更加适应于对数据库定义的更新。



2. 使用%ROWTYPE


替代:
PL/SQL记录类型是用户自定义的,记录提供了一种处理独立又作为一个整体单元相关的变量的机制,类似在java开发中定义一个model类。

DECLARE

       /*Define a record type to hold common student informationi*/

       TYPE t_empRecord IS RECORD(

              var_empId NUMBER(5),

              var_name VARCHAR2(20));
       /*Declare a variable of this type.*/

       v_empInfo t_empRecord;


       用SELECT语句向记录赋值,这将会从数据库中检索数据并将该数据存储到记录中。要注意的是,记录中字段应该和查询结果列表中的字段相匹配。

SELECT emp_id,name

into v_empInfo
from emp where emp_id=32;


%ROWTYPE

   在PL/SQL中将一个记录声明为具有相同类型的数据库行。PL/SQL提供了%ROWTYPE运算符,使得这样的操作更为方便。

例如:

DECLARE

       var_emp emp%ROWTYPE;

将定义一个记录,该记录中的字段将与emp表中的列相对应。

游标的一行:

  create or replace procedure PRO_TEMPLATE as
NEED_DO_FOR_ZL INTEGER;
CURRENT_MAX_ID MEMO_TEMPLET.TEMPLET_ID%TYPE;
CURSOR TEMPLATE_CUR IS SELECT TEMPLET_NAME, TEMPLET_CONTENT FROM SYS_TEMPLET;
TEM_INSTANCE TEMPLATE_CUR%ROWTYPE;
begin
null;
end;

分享到:
评论

相关推荐

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

    Oracle PL/SQL 中的 %TYPE 和 %ROWTYPE 应用详解 Oracle PL/SQL 是一种强大的编程语言,广泛应用于数据库开发中。在 PL/SQL 中,变量的声明和使用是非常重要的。其中,%TYPE 和 %ROWTYPE 是两个非常重要的概念,...

    Oracle_plsql基本语法笔记.txt

    %type用法,%rowtype用法,TYPE用法 游标的使用 for 循环 loop循环 while循环 if / else 的用法 case 的用法 标题 错误定义 error的设定 exception用法 标题 存储过程及函数 procedure 的建立...

    PL/SQL 基础.doc

    3) OCI: C语言和数据库打交道的方法,和Pro*C很相似,更底层,很少用 只适合ORACLE; 4) SQLJ: 很新的一种用Java访问Oracle数据库的方法,会的人不多; 5) JDBC 6) PL/SQL: 存储在数据库内运行, 其他方法为在...

    亚信科技面试原题数据库

    课程名称 oracle数据库系统编程 课程号 MD02 考试时间 90分钟 考试方式(闭)卷 (共 6 页) (本试卷满分100分,60分合格,答案请写在答题卡上) 一、选择题(含单选题和多选题,每题2分,共60分) 在每小题列出...

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

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

    oracle存储过程进阶

    介绍了oracle存储过程中常见的sql写法,游标(隐式,显式),触发器, CASE ... WHEN ...... ELSIF ...THEN...ELSE...END IF,记录类型变量定义和使用 ,%type定义变量,%rowtype定义变量,goto,异常。多且全

    PLSQL编程03

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

    oracle 基础

    这个文档主要是讲pck里面的语法,还没写完 ...重点是对函数请求参数、返回,into、 for、 corsor、%type、%rowtype等的简单理解tst 测试pck文件还会继续完善 PCK文件配置有截图和详细说明 请看文件夹里面的 说明 文件

    PLsql语法.md

    #### PLsql 是什么 - 是专用于Oracle服务器,在SQL基础之上,**添加了一些过程化控制语句,叫PLSQL** ...##### 何时使用%type,何时使用%rowtype? ### 条件判断 #### 基本语法 #### 小练习

    oracle下巧用bulk collect实现cursor批量fetch的sql语句

    在一般的情况下,使用批量fetch的几率并不是很多,但是Oracle提供了这个功能我们最好能熟悉一下,说不定什么时候会用上它。 代码如下:declare cursor c1 is select * from t_depart; v_depart t_depart%...

    Oracle8i_9i数据库基础

    §16.4 过程和函数中的例外处理 282 §16.4.1 使用系统定义的例外处理 282 §16.4.1.1 没有例外处理的缺点 283 §16.4.1.2 使用预定义的例外处理 283 §16.4.2 使用用户定义的例外处理+ 286 §16.4.2.1 定义的用户...

    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 10g 开发与管理

    7.4 使用%TYPE和%ROWTYPE类型的变量 58 1.%Type 59 2.%RowType 59 7.5 复合变量 60 1.记录类型(“行”) 60 2.记录表类型(“表” ) 60 (1)使用的原因: 60 (2)定义记录表类型(联合数组) 60 7.6 条件判断...

    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 ...

    oracle存储过程中return和exit区别概述及测试

    v_name cc_quiz_stat %rowtype; v_state cc_quiz_stat.state %type; begin declare cursor cur_cc is select * from cc_quiz_stat; cursor cur_jc(v_n varchar2) is select state from cc_quiz_stat; begi

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

    17.4.3 %TYPE、%ROWTYPE定义记录变量  17.4.4 参数化游标  17.4.5 游标中的循环  17.4.6 游标变量 17.5 小结  第18章 事务控制与并发处理 18.1 SQL事务控制  18.1.1 事务控制的引入  18.1.2 事务的...

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

    17.4.3 %type、%rowtype定义记录变量 367 17.4.4 参数化游标 368 17.4.5 游标中的循环 369 17.4.6 游标变量 371 17.5 小结 372 第18章 事务控制与并发处理 373 18.1 sql事务控制 373 18.1.1 事务控制的引入 ...

    Oracle BULK COLLECT批量取数据解决方法

    代码如下: — Created on 2010/11/04 by WANGNAN declare — Local... TYPE t_pg3 IS TABLE OF asis.PG3_AGENTCD_CONVERSION% ROWTYPE; v_pg3_table t_pg3; c_pg3_vendor com.cRef; v_str VARCHAR2( 250); begin — Tes

    Oracle批量查询、删除、更新使用BULK COLLECT提高效率

    BULK COLLECT(成批聚合类型)和数组集合type类型is table of 表%rowtype index by binary_integer用法笔记。 例1: 批量查询项目资金账户号为 “320001054663”的房屋账户信息并把它们打印出来 . DECLARE TYPE acct_...

    精髓Oralcle讲课笔记

    -- 首先,以超级管理员的身份登录oracle sqlplus sys/bjsxt as sysdba --然后,解除对scott用户的锁 alter user scott account unlock; --那么这个用户名就能使用了。 --(默认全局数据库名orcl) 1、...

Global site tag (gtag.js) - Google Analytics