- 浏览: 123966 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (165)
- 数据库 (45)
- 架构 (0)
- java web前端+框架 (9)
- java web后端+框架 (56)
- Eclipse插件 (1)
- 解题思路 (2)
- Eclipse (2)
- linux (6)
- jquery (4)
- 正则 (3)
- jsp (1)
- javascript (8)
- oracle (39)
- 生活 (1)
- weblogic (5)
- tomcat (3)
- Jrebel (1)
- powerdesigner (1)
- svn (1)
- log4j (1)
- IDE (1)
- POI (2)
- jvm (2)
- ssh (1)
- http (1)
- notepad++ (2)
- 润乾 (1)
- 设计模式 (0)
- 实用类Utils (2)
- 算法 (1)
- xml (1)
- 实用类 (2)
最新评论
oracle 表类型变量的使用
使用记录类型变量只能保存一行数据,这限制了SELECT语句的返回行数,如果SELECT语句返回多行就会错。Oracle提供了另外一种自定义类型,也就是表类型,它是对记录类型的扩展,允许处理多行数据,类似于表。
创建表类型的语法如下:
TYPE table_name IS TABLE OF data_type [ NOT NULL ]
INDEX BY BINARY_INTEGER ;
语法说明如下:
--table_name 创建的表类型名称。
--IS TABLE 表示创建的是表类型。
--data_type 可以是任何合法的PL/SQL数据类型,例如varchar2。
--INDEX BY BINARY_INTEGER 指定系统创建一个主键索引,用于引用表类型变量中的特定行。
使用表类型的例子:
例一:直接对表类型变量赋值
declare
type my_emp is table of scott.emp%rowtype
index by binary_integer;
new_emp my_emp;
begin
new_emp(1).empno:=6800;
new_emp(1).ename:='tracy';
new_emp(1).job:='clerk';
new_emp(1).sal:=2500;
new_emp(2).empno:=6900;
new_emp(2).ename:='luck';
new_emp(2).job:='manager';
new_emp(2).sal:=4000;
dbms_output.put_line(new_emp(1).empno ||','||new_emp(1).ename||','||new_emp(1).job||
','||new_emp(1).sal);
dbms_output.put_line(new_emp(2).empno ||','||new_emp(2).ename||','||new_emp(2).job||
','||new_emp(2).sal);
end;
/
例二:使用表类型变量的方法:变量名.方法名[索引号]
declare
type my_emp is table of scott.emp%rowtype
index by binary_integer;
new_emp my_emp;
begin
new_emp(1).empno:=6800;
new_emp(1).ename:='tracy';
new_emp(1).job:='clerk';
new_emp(1).sal:=2500;
new_emp(2).empno:=6900;
new_emp(2).ename:='luck';
new_emp(2).job:='manager';
new_emp(2).sal:=4000;
dbms_output.put_line(new_emp.first||','||new_emp.count||','||new_emp.last);
dbms_output.put_line(new_emp(1).empno ||','||new_emp(1).ename||','||new_emp(1).job||
','||new_emp(1).sal);
dbms_output.put_line(new_emp(2).empno ||','||new_emp(2).ename||','||new_emp(2).job||
','||new_emp(2).sal);
--new_emp.delete(1);
dbms_output.put_line(new_emp.next(1));
end;
//
例三:与游标结合使用
declare
type my_emp is table of scott.emp%rowtype
index by binary_integer;
new_emp my_emp;
v_num number:=0;
cursor cur_emp is select empno,ename,job,sal from scott.emp;
begin
for v_emp in cur_emp loop
v_num:=v_num+1;
select * into new_emp(v_num) from scott.emp
where ename=v_emp.ename;
end loop;
for i in 1..new_emp.count loop
dbms_output.put_line(new_emp(i).empno ||','||new_emp(i).ename||','||new_emp(i).job||
','||new_emp(i).sal);
end loop;
end;
/
注意:不能直接对表变量赋值:select * into new_emp from scott.emp where deptno=30; 这种赋值方法是错的,赋值需要使用下标,如上面的的例子。
使用记录类型变量只能保存一行数据,这限制了SELECT语句的返回行数,如果SELECT语句返回多行就会错。Oracle提供了另外一种自定义类型,也就是表类型,它是对记录类型的扩展,允许处理多行数据,类似于表。
创建表类型的语法如下:
TYPE table_name IS TABLE OF data_type [ NOT NULL ]
INDEX BY BINARY_INTEGER ;
语法说明如下:
--table_name 创建的表类型名称。
--IS TABLE 表示创建的是表类型。
--data_type 可以是任何合法的PL/SQL数据类型,例如varchar2。
--INDEX BY BINARY_INTEGER 指定系统创建一个主键索引,用于引用表类型变量中的特定行。
使用表类型的例子:
例一:直接对表类型变量赋值
declare
type my_emp is table of scott.emp%rowtype
index by binary_integer;
new_emp my_emp;
begin
new_emp(1).empno:=6800;
new_emp(1).ename:='tracy';
new_emp(1).job:='clerk';
new_emp(1).sal:=2500;
new_emp(2).empno:=6900;
new_emp(2).ename:='luck';
new_emp(2).job:='manager';
new_emp(2).sal:=4000;
dbms_output.put_line(new_emp(1).empno ||','||new_emp(1).ename||','||new_emp(1).job||
','||new_emp(1).sal);
dbms_output.put_line(new_emp(2).empno ||','||new_emp(2).ename||','||new_emp(2).job||
','||new_emp(2).sal);
end;
/
例二:使用表类型变量的方法:变量名.方法名[索引号]
declare
type my_emp is table of scott.emp%rowtype
index by binary_integer;
new_emp my_emp;
begin
new_emp(1).empno:=6800;
new_emp(1).ename:='tracy';
new_emp(1).job:='clerk';
new_emp(1).sal:=2500;
new_emp(2).empno:=6900;
new_emp(2).ename:='luck';
new_emp(2).job:='manager';
new_emp(2).sal:=4000;
dbms_output.put_line(new_emp.first||','||new_emp.count||','||new_emp.last);
dbms_output.put_line(new_emp(1).empno ||','||new_emp(1).ename||','||new_emp(1).job||
','||new_emp(1).sal);
dbms_output.put_line(new_emp(2).empno ||','||new_emp(2).ename||','||new_emp(2).job||
','||new_emp(2).sal);
--new_emp.delete(1);
dbms_output.put_line(new_emp.next(1));
end;
//
例三:与游标结合使用
declare
type my_emp is table of scott.emp%rowtype
index by binary_integer;
new_emp my_emp;
v_num number:=0;
cursor cur_emp is select empno,ename,job,sal from scott.emp;
begin
for v_emp in cur_emp loop
v_num:=v_num+1;
select * into new_emp(v_num) from scott.emp
where ename=v_emp.ename;
end loop;
for i in 1..new_emp.count loop
dbms_output.put_line(new_emp(i).empno ||','||new_emp(i).ename||','||new_emp(i).job||
','||new_emp(i).sal);
end loop;
end;
/
注意:不能直接对表变量赋值:select * into new_emp from scott.emp where deptno=30; 这种赋值方法是错的,赋值需要使用下标,如上面的的例子。
发表评论
-
oracle sql替换指定范围的字符串
2015-06-18 17:49 1025--oracle替换指定范围的字符串(范围4-6) selec ... -
oracle字符集修改 中文乱码
2015-03-30 15:06 909sqlplus / as sysdba;//操作系统用户认证模 ... -
oracle表关联层级树查询
2015-03-20 17:27 596select level ,lpad(' ', ( ... -
转:oracle层次查询 树查询 (详细)
2015-03-20 15:03 830oracle层次查询 转自:http://www.2cto. ... -
ORACLE表空间管理维护
2015-01-22 11:34 408http://www.cnblogs.com/kerrycod ... -
自写函数用于替换wm_concat函数.zip
2015-01-19 16:25 1174-- wm_concat出现在oracle10g版本中,不仅是 ... -
禁用启用所有外键约束.tst
2015-01-12 11:05 550禁用所有外键约束.tst declare cursor c ... -
oracle查询生成列别名
2015-01-06 15:00 404select ',' ,col.COLUMN_NA ... -
linux下重启oracle
2015-01-05 15:44 505oracle/oracle连接ssh后 登录数据库 ... -
oracle删除重复记录
2014-08-22 15:49 327delete from cred_account ca1 w ... -
oracle获取过程的错误异常代码,错误,异常栈信息
2014-08-22 15:19 296得到oracle异常行号,代码,异常栈信息 Sql代码 d ... -
数据库导入导出dump.txt
2014-07-28 10:26 417数据库导入导出dump -
oracle表空间管理
2014-04-24 11:15 693--查看修改ORACLE表空间 --1、查看所有表空间信息 s ... -
连接到sqlplus
2014-04-17 11:25 424root/passwd su - oracle sqlplus ... -
0001-Oracle-系统-视图
2014-03-29 09:59 430--oracle树查询 select * from FUNC ... -
ORACLE查看并修改最大连接数
2014-03-26 13:52 528ORACLE查看并修改最大连接数 第一步,在cmd命令行,输入 ... -
oracle系统视图
2014-03-26 09:29 399--oracle树查询 select * from FUNC ... -
Oracle批量杀死锁.tst
2014-03-03 16:45 434declare cursor mycur is s ... -
Oracle批量杀死锁.sql
2014-03-03 16:43 458declare cursor mycur is s ... -
oracle查看表空间使用情况
2013-12-11 15:19 845select b.file_name 物理文件名 ...
相关推荐
NULL 博文链接:https://vernonchen163.iteye.com/blog/1902977
Oracle记录类型变量[归类].pdf
学习oracle定义并使用变量,复合类型
在 Oracle 数据库中,创建数据表时我们必须根据其所存储信息的特性定义表中所有字段的数据类型。Oracle 数据库支持多种不同的数据类型,甚至允许用户自定义类型,但最常用的还是其基本数据类型。 Oracle 数据类型...
例如,我们可以声明 id_type、phone_type、remark_type 等集合类型变量,以便存储 sr_contacts 表中的 sr_contact_id、contact_phone、remark 字段。然后,我们可以使用 fetch bulk collect into 语句将数据批量取出...
第13章 Oracle数据类型(教学视频:21分钟) 231 第14章 Oracle中的函数与表达式(教学视频:111分钟) 240 第15章 Oracle中的控制语句(教学视频:16分钟) 282 第16章 SQL查询(教学视频:55分钟) 290 第17章...
韩顺平老师 oracle 教程笔记 1.Oracle 认证,与其它数据库比较,安装 ...18.定义并使用变量,复合类型 19.pl/sql 的进阶--控制结构(分支,循环,控制) 20.PL/SQL 分页 21.例外处理 22.oracle 的视图
在编写PL/SQL程序时,可以使用标量(Scalar)类型、复合(Composite)类型、参照(Reference)类型和LOB(LargeObject)类型等四种类型。在PL/SQL中用的最多的就是标量变量,当定义标量变量时,必须要指定标题数据...
PL/SQL 变量的使用 表达式 PL/SQL结构控制 PL/SQL中使用DML和DDL语言 PL/SQL中的异常 PL/SQL函数编写 第8章-游标,数据的缓存区 什么是游标 显示游标 隐式游标 第9章-视图,数据库中虚拟的表 什么是...
25. 安装Oracle后,经常使用的修改表空间的SQL代码 26. 比较SQL Server与Oracle、DB2 27. 多个数据库时,如何设置默认数据库 28. 各种数据类型的比较 29. 漫谈oracle中的空值 30. 没有备份、只有归档日志,如何...
四:oracle表的管理(数据类型,表创建删除,数据CRUD操作) 9 oracle支持的数据类型 10 字符类 10 数字型 10 日期类型 10 建表 10 修改表 11 删除表 11 添加数据 11 修改数据 12 删除数据 12 savepoint a; --创建保存...
5.2.6 使用绑定变量 5.2.7 跟踪语句 5.3 设置SQL*Plus环境 5.3.1 SHOW命令 5.3.2 SET命令 5.4 SQL*Plus环境介绍 5.4.1 存储SQL*Plus环境 5.4.2 假脱机输出 5.4.3 联机帮助 5.5 使用SQL*Plus格式化...
指定表中的数据类型 7-8 创建和修改表 7-11 了解数据完整性 7-13 定义约束条件 7-15 违反约束条件 7-16 约束条件状态 7-17 约束条件检查 7-19 使用 SQL 创建约束条件:示例 7-20 查看表中的列 7-21 查看表...
8.3.3 使用多个 TEMP 表空间分布排序 8.4 优化数据存储的技术 8.4.1 使行链接和行迁移最小化 8.4.2 检测行链接/迁移 8.4.3 确定模式中的链接行 8.4.4 防止和纠正行链接/迁移 8.4.5 行链接/迁移的技巧 8.4.6 ...
因为.net中的除string类的数据类型外,其它类型要求手动修改UDT自动生成的类文件,本人测试了2天后,才明白要修改UDT自动生成的类文件,此功能特好用,尤其是象财务凭证中子栏的一次更新,要求一次将整张凭证更新到ORACLE,...
通过使用 %TYPE,v_FirstName 变量将同 students 表的 first_name 列的类型相同(可以理解为将两者邦定起来)。每次匿名块或命名块运行该语句块以及编译存储对象(过程、函数、包、对象类和触发器)时,就会确定该...
结合实例,介绍了oracle存储过程的用法,包括定义,变量类型,游标,流程分支语句的使用
指定表中的数据类型7-8 创建和修改表7-11 了解数据完整性7-13 定义约束条件7-15 违反约束条件7-16 约束条件状态7-17 约束条件检查7-19 使用SQL 创建约束条件:示例7-20 查看表中的列7-21 查看表的内容7-22 表操作7-...