%type的用法
//%type
//如果声明的变量是直接映射到数据库的某一列上,那么就可以使用%type关键字将变量
//锚定到这个列上。这样做有什么好处呢?
//比如:
//declare v_ename scott.emp.ename%type;
//当数据类型发生变化时,此方法显得非常灵活。
//如果更改了列的长度,那么锚定到该列上的所有变量都会自动更改其长度;
//假设我们将v_ename定义为varchar2(10),那么当emp表中的ename列发生变化时,
//我们得手动将v_enam更改为emp.ename相同的数据长度;
//当我们使用锚定类型后,变量就会自动进行调整。
//%rowtype
//%rowtype与%type相似;不过它将变量锚定到表的所有列,而不是锚定到某一列;
//更多关于%rowtype与%type,
//请参考:http://blog.csdn.NET/BOBO12082119/archive/2010/12/02/6051367.aspx
//下面是一个实例:
create table dept(
deptno varchar2(5),
dname varchar2(20),
loc varchar2(20)
);
create or replace procedure pro_insert(
deptno_in in dept.deptno%type,
dname_in in dept.dname%type,
loc_in in dept.loc%type
)
as
v_dept dept%rowtype;
begin
begin
insert into dept
select deptno_in,dname_in,loc_in
from dual;
commit;
dbms_output.put_line('inserting successed');
exception
when others then
rollback;
end;
begin
select deptno_in,dname_in,loc_in
into v_dept from dual;
dbms_output.put_line(
'The data having been inserted.'||
'deptno:'||v_dept.deptno||
',dname:'||v_dept.dname||
',loc:'||v_dept.loc
);
end;
end pro_insert;
//
//上面的过程中,使用到了嵌套块;
//所谓嵌套块就是块中包含其他子块;
//嵌套块允许出现在代码块的异常处理部分和执行部分,
//但是不允许出现在声明中。
//
SQL> set serveroutput on;
SQL> exec pro_insert('111','财务部','福州');
inserting successed
The data having been inserted.deptno:111,dname:财务部,loc:福州
PL/SQL procedure successfully completed
//
//从这里看出来,%rowtype定义的变量作用有点相似游标,
//但是我们不能将%rowtype定义的变量当做游标来使用,
//否则我们将会得到下面的错误:
//ORA-01422: exact fetch returns more than requested number of rows
declare v_dept dept%rowtype;
begin
select deptno,dname,loc
into v_dept
from dept;
dbms_output.put_line(
'The data having been inserted.'||
'deptno:'||v_dept.deptno||
',dname:'||v_dept.dname||
',loc:'||v_dept.loc
);
end;
//
//下面我们用游标来实现上面的操作,具体看下面的匿名块:
declare
cursor cv_dept is
select *
from dept;
begin
//变量v_dept不必我们显示声明
//for循环会为我们隐式的打开和关闭游标,不必我们现实的打开和关闭游标
for v_dept in cv_dept loop
dbms_output.put_line(
'deptno:'||v_dept.deptno||
',dname:'||v_dept.dname||
',loc:'||v_dept.loc
);
end loop;
end;
//
deptno:111,dname:财务部,loc:福州
deptno:120,dname:销售部,loc:大连
deptno:130,dname:科研部,loc:北京
PL/SQL procedure successfully completed
- //%type
- //如果声明的变量是直接映射到数据库的某一列上,那么就可以使用%type关键字将变量
- //锚定到这个列上。这样做有什么好处呢?
- //比如:
- //declare v_ename scott.emp.ename%type;
- //当数据类型发生变化时,此方法显得非常灵活。
- //如果更改了列的长度,那么锚定到该列上的所有变量都会自动更改其长度;
- //假设我们将v_ename定义为varchar2(10),那么当emp表中的ename列发生变化时,
- //我们得手动将v_enam更改为emp.ename相同的数据长度;
- //当我们使用锚定类型后,变量就会自动进行调整。
- //%rowtype
- //%rowtype与%type相似;不过它将变量锚定到表的所有列,而不是锚定到某一列;
- //更多关于%rowtype与%type,
- //请参考:http://blog.csdn.NET/BOBO12082119/archive/2010/12/02/6051367.aspx
- //下面是一个实例:
- create table dept(
- deptno varchar2(5),
- dname varchar2(20),
- loc varchar2(20)
- );
- create or replace procedure pro_insert(
- deptno_in in dept.deptno%type,
- dname_in in dept.dname%type,
- loc_in in dept.loc%type
- )
- as
- v_dept dept%rowtype;
- begin
- begin
- insert into dept
- select deptno_in,dname_in,loc_in
- from dual;
- commit;
- dbms_output.put_line('inserting successed');
- exception
- when others then
- rollback;
- end;
- begin
- select deptno_in,dname_in,loc_in
- into v_dept from dual;
- dbms_output.put_line(
- 'The data having been inserted.'||
- 'deptno:'||v_dept.deptno||
- ',dname:'||v_dept.dname||
- ',loc:'||v_dept.loc
- );
- end;
- end pro_insert;
- //
- //上面的过程中,使用到了嵌套块;
- //所谓嵌套块就是块中包含其他子块;
- //嵌套块允许出现在代码块的异常处理部分和执行部分,
- //但是不允许出现在声明中。
- //
- SQL> set serveroutput on;
- SQL> exec pro_insert('111','财务部','福州');
- inserting successed
- The data having been inserted.deptno:111,dname:财务部,loc:福州
- PL/SQL procedure successfully completed
- //
- //从这里看出来,%rowtype定义的变量作用有点相似游标,
- //但是我们不能将%rowtype定义的变量当做游标来使用,
- //否则我们将会得到下面的错误:
- //ORA-01422: exact fetch returns more than requested number of rows
- declare v_dept dept%rowtype;
- begin
- select deptno,dname,loc
- into v_dept
- from dept;
- dbms_output.put_line(
- 'The data having been inserted.'||
- 'deptno:'||v_dept.deptno||
- ',dname:'||v_dept.dname||
- ',loc:'||v_dept.loc
- );
- end;
- //
- //下面我们用游标来实现上面的操作,具体看下面的匿名块:
- declare
- cursor cv_dept is
- select *
- from dept;
- begin
- //变量v_dept不必我们显示声明
- //for循环会为我们隐式的打开和关闭游标,不必我们现实的打开和关闭游标
- for v_dept in cv_dept loop
- dbms_output.put_line(
- 'deptno:'||v_dept.deptno||
- ',dname:'||v_dept.dname||
- ',loc:'||v_dept.loc
- );
- end loop;
- end;
- //
- deptno:111,dname:财务部,loc:福州
- deptno:120,dname:销售部,loc:大连
- deptno:130,dname:科研部,loc:北京
- PL/SQL procedure successfully completed
%RowType 的使用,获取某行的数据类型。
set serveroutput on;
DECLARE
rowData student%ROWTYPE;
BEGIN
SELECT * INTO rowData
FROM student
WHERE sName = 'Jack'; DBMS_OUTPUT.put_line ('find the name: '||rowData.sName);
DBMS_OUTPUT.put_line ('find the age: '||rowData.SAGE);
DBMS_OUTPUT.put_line ('find the email: '||rowData.sEmail);
DBMS_OUTPUT.put_line ('find the phone: '||rowData.sPhone);
DBMS_OUTPUT.put_line ('find the address: '||rowData.sAddress); END;
%type的用法的更多相关文章
- Activator.CreateInstance 方法 (Type) 的用法
转自:http://www.cnblogs.com/lmfeng/archive/2012/01/30/2331666.html Activator.CreateInstance 方法 (Type) ...
- 【C#反射】Type的用法
Type属性的应用 Type type = typeof(MyClass); Console.Write("$类型名:{ type.Name}"); Console.Write(& ...
- python type的用法
目录 描述 语法 用法 type和isinstance Type和Object 描述 python的 type 函数有两个用法,当只有一个参数的时候,返回对象的类型.当有三个参数的时候返回一个类对象. ...
- Python中type的用法
目录 描述 语法 用法 type和isinstance Type和Object 描述 python的 type 函数有两个用法,当只有一个参数的时候,返回对象的类型.当有三个参数的时候返回一个类对象. ...
- golang中type常用用法
golang中,type是非常重要的关键字,一般常见用法就是定义结构,接口等,但是type还有很多其它的用法,在学习中遇到了以下几种,这点简单总结记录下 定义结构 type Person struct ...
- Type InvokeMember()用法简介
举例: Type tDate = typeof(System.DateTime); Object result = tDate.InvokeMember("Now", Bindin ...
- linux type命令用法_转
转自:http://codingstandards.iteye.com/blog/831504 在脚本中type可用于检查命令或函数是否存在,存在返回0,表示成功:不存在返回正值,表示不成功. $ t ...
- c# Type.InvokeMember用法
函数原型: public object InvokeMember(string, BindingFlags, Binder, object, object[]);string:你所要调用的函数名Bin ...
- 标准类型内建函数 type()介绍
我们现在来正式介绍一下 type().在Python2.2 以前, type() 是内建函数.不过从那时起,它变成了一个“工厂函数”.在本章的后面部分我们会讨论工厂函数, 现在你仍然可以将type() ...
随机推荐
- Spectral Clustering
谱聚类算法(Spectral Clustering)优化与扩展 谱聚类(Spectral Clustering, SC)在前面的博文中已经详述,是一种基于图论的聚类方法,简单形象且理论基础充分,在 ...
- 新认识:SDF数据库
新认识:SDF数据库 一.SDF数据库初探 SDF是一个标准缩略数据库格式.这个数据库包含扩展名为.sdf的文件并且以结构化文件格式进行数据存储.这些SDF文件通常用于在不同数据库应用之间移动数据.它 ...
- 用邻接表或vector实现存边以及具体如何调用[模板]
存边: 对于指针实现的邻接表: struct edge{ int from,next,to,w; }E[maxn]; int head[maxn],tot=0;//head初始化为-1: void a ...
- DevExpress 学习使用之 NavBarControl
TNND,没辙啊,没用过那么高级的玩意儿,暂时也没找到中文的详细帮助,简直就是蚂蚁搬家似的摸索,一点儿点儿来吧. 先是NavBarControl的界面样子,貌似可以通过 PaintStyleKind ...
- iOS view和viewController的生命周期
一.ViewController的职责 对内管理与之关联的View,对外跟其他ViewController通信和协调.对于与之关联的View,ViewController总是在需要的时候才加载视图,并 ...
- 如何在大型的并且有表分区的数据库中进行DBCC CHECKDB操作
如何在大型的并且有表分区的数据库中进行DBCC CHECKDB操作 其实这个问题已经在<SQLSERVER企业级平台管理实践>里徐老师已经讲过了,不过我想用自己的语言再讲详细一些 笔记链接 ...
- node.js系列笔记之node.js初识《一》
node.js系列笔记之node.js初识<一> 一:环境说明 1.1 Linux系统CentOS 5.8 1.2 nodejs v0.10.15 1.3 nodejs源码下载地址 htt ...
- 设计师和开发人员更快完成工作需求的20个惊人的jqury插件教程(上)
[转] 设计师和开发人员更快完成工作需求的20个惊人的jqury插件教程(上) jquery的功能总是那么的强大,用他可以开发任何web和移动框架,在浏览器市场,他一直是占有重要的份额,今天,就给大家 ...
- 黑马程序员:Java基础总结----网络编程
黑马程序员:Java基础总结 网络编程 ASP.Net+Android+IO开发 . .Net培训 .期待与您交流! 网络编程 网络通讯要素 . IP地址 . 网络中设备的标识 . 不易记忆,可用 ...
- VMware vSphere 服务器虚拟化之二十 桌面虚拟化之准备虚拟桌面模版
VMware vSphere服务器虚拟化之二十 桌面虚拟化之准备虚拟桌面模版 在虚拟桌面的部署中,我们必须准备好作为桌面模板的父映像,通过父映像使用完整克隆或者View Composer的链接克隆,创 ...