- 浏览: 234005 次
- 性别:
- 来自: 广东
文章分类
最新评论
-
wangmuchang:
解压需要密码
CAS单点登录之测试应用 -
ayang722:
首先就要在运行报表birt的IEngineTask中加入, J ...
birt配置动态数据源 -
lihong11:
very good!
js常用方法 -
qtlkw:
你共享出来为什么要密码?要密码为何要共享出来?汗
CAS单点登录之测试应用 -
lishouxinghome:
请问如何获得用户的Id呢,往指点
使用 CAS 在 Tomcat 中实现单点登录
Oracle数组一般可以分为固定数组和可变数组
固定数组
declare type v_ar is varray(10) of varchar2(30); my_ar v_ar:=v_ar('g','m','d','龚','帅'); begin for i in 1..my_ar.count loop dbms_output.put_line(my_ar(i)); end loop; end; declare type v_ar is varray(10) of varchar2(30); my_ar v_ar:=v_ar('g','m','d','龚','帅'); begin for i in 1..my_ar.count loop dbms_output.put_line(my_ar(i)); end loop; end; --可变数组 --一维数组 declare type v_table is table of varchar2(30) index by binary_integer; --类型可以是前面的类型定义,index by binary_integer子句代表以符号整数为索引, --这样访问表类型变量中的数据方法就是“表变量名(索引符号整数)”。 my_table v_table; begin for i in 1..20 loop my_table(i):=i; dbms_output.put_line(my_table(i)); end loop; end; declare type v_table is table of varchar2(30) index by binary_integer; --类型可以是前面的类型定义,index by binary_integer子句代表以符号整数为索引, --这样访问表类型变量中的数据方法就是“表变量名(索引符号整数)”。 my_table v_table; begin for i in 1..20 loop my_table(i):=i; dbms_output.put_line(my_table(i)); end loop; end; --多维数组--多条记录 declare type v_table is table of t_user%rowtype index by binary_integer; my_table v_table; begin select * bulk collect into my_table from t_user; for i in 1..my_table.count/10 --my_table.count/10取到的值为四舍五入值 loop dbms_output.put_line('suser--'||my_table(i).suser); dbms_output.put_line('name---'||my_table(i).name); dbms_output.put_line('sex----'||my_table(i).sex); end loop; end; declare type v_table is table of t_user%rowtype index by binary_integer; my_table v_table; begin select * bulk collect into my_table from t_user; for i in 1..my_table.count/10 --my_table.count/10取到的值为四舍五入值 loop dbms_output.put_line('suser--'||my_table(i).suser); dbms_output.put_line('name---'||my_table(i).name); dbms_output.put_line('sex----'||my_table(i).sex); end loop; end; 多维数组--单条记录 declare type v_table is table of t_user%rowtype index by binary_integer; my_table v_table; begin select * into my_table(9) from t_user where suser='admin'; --my_table(i) i可以为任意整数,但取值时必须保持以i一致; dbms_output.put_line('--suser--'||my_table(9).suser||'--name--'||my_table(9).name); end; declare type v_table is table of t_user%rowtype index by binary_integer; my_table v_table; begin select * into my_table(9) from t_user where suser='admin'; --my_table(i) i可以为任意整数,但取值时必须保持以i一致; dbms_output.put_line('--suser--'||my_table(9).suser||'--name--'||my_table(9).name); end; --自定义数组 create or replace type varray_list as varray(30) of varchar2(50); --使用自定义数组 create or replace procedure show_list(p_varlist in varray_list) is v_str varchar2(50); begin for i in 1..p_varlist.count loop v_str:=p_varlist(i); dbms_output.put_line('v_str='||v_str); dbms_output.put_line('p_varlist('||i||')='||p_varlist(i)); end loop; end; declare my_var varray_list:=varray_list('g','m','d','龚','帅'); begin show_list(my_var); end;
实例
--固定数组 declare type type_array is varray(10) of varchar2(20); var_array type_array:=type_array('ggs','jjh','wsb','csl','dd','bb'); begin for i in 1..var_array.count loop dbms_output.put_line(var_array(i)); end loop; end; --可变数组 declare type type_array is table of varchar2(20) index by binary_integer; var_array type_array; begin var_array(1):='aa'; var_array(2):='bb'; for i in 1..var_array.count loop dbms_output.put_line( var_array(i)); end loop; end; --可变数组取表 declare begin end; create or replace procedure proc_stock(n number) as var_stock_code varchar2(10); var_stock_price number; begin for i in 1..n loop var_stock_code:= lpad(STR1 =>i ,LEN =>6 ,PAD =>'0' ) ; var_stock_price:=trunc(dbms_random.value*100)+1; --dbms_output.put_line(var_stock_code); --dbms_output.put_line(var_stock_price); insert into t_stock (stockcode,stockprice) values(var_stock_code,var_stock_price); commit; end loop; end; declare begin proc_stock(1000000); end; --用游标访问 14.578秒 13.5 13.8 declare cursor cur is select * from t_stock; row_stock t_stock%rowtype; begin open cur; loop fetch cur into row_stock; exit when cur%notfound; null; end loop; close cur; end; --用数组实现 4.813 1.953 2 declare type type_array is table of t_stock%rowtype index by binary_integer; var_array type_array; begin select * bulk collect into var_array from t_stock; for i in 1..var_array.count loop null; end loop; end; --访问自定义表 declare type type_record is record( username varchar2(20), sex varchar2(2) ); type_record_user type_record; type type_array is table of type_record_user%type index by binary_integer; var_array type_array; begin select username,sex bulk collect into var_array from tuser; for i in 1..var_array.count loop dbms_output.put_line(var_array(i).username); dbms_output.put_line(var_array(i).sex); end loop; end;
关于ORACLE中的数组:记录同集合
集合可以有三种实现方式:
1 自定义一个TYPE使用VARRAY来得到一个数组但只能对基本类型定义如:
CREATE TYPE 类型名 AS VARRAY OF VARCHAR2(20);
1 自定义一个TYPE使用VARRAY来得到一个数组但只能对基本类型定义如:
CREATE TYPE 类型名 AS VARRAY(52) OF VARCHAR2(20);
不能使用如下:
CREATE TYPE 类型名 AS VARRAY(52) OF 表名%ROWTYPE;
注意:使用VARRAY时一定要先指定数组大小
不然搞创建数组类型
2 内嵌表如:
TYPE 类型名 IS TABLE OF 具体类型如:(表名%ROWTYPE);
内嵌表数组分二种:Index_by表同嵌套表如上的就是嵌套表而Index_by表只要在其尾回上 INDEX BY
BINARY_INTEGER就可以了
例子:
declare cursor cur_test is select id,mc from test; type t_test1 is table of varchar2(60) index by binary_integer; type t_test2 is table of test%rowtype index by binary_integer; var_test1 t_test1; var_test2 t_test2; var_new t_test2; begin SELECT id,mc INTO var_test2(0) FROM test WHERE id='111'; dbms_output.put_line('var_test2(0):'||var_test2(0).id||'---'||var_test2(0).mc); SELECT id,mc INTO var_test2(8) FROM test WHERE id='333'; dbms_output.put_line('var_test2(8):'||var_test2(8).id||'---'||var_test2(8).mc); var_new := var_test2; dbms_output.put_line('===== copy var_test2 to var_new ====='); dbms_output.put_line('var_new(0):'||var_new(0).id||'---'||var_new(0).mc); dbms_output.put_line('var_new(8):'||var_new(8).id||'---'||var_new(8).mc); end; =================================================================================== DECLARE TYPE t_test1 IS TABLE OF test.id%TYPE; TYPE t_test2 IS VARRAY (10) OF test.id%TYPE; var_test1 t_test1; var_test2 t_test2; begin --var_test1(1) := ('test1.1'); --没有初始化不能赋值 var_test1 := t_test1('test1.1','test1.2','test1.3'); dbms_output.put_line('var_test1: '||var_test1(1)||','||var_test1(2)||','||var_test1(3)); var_test2 := t_test2('test2.1','test2.2','test2.3'); dbms_output.put_line('var_test2: '||var_test2(1)||','||var_test2(2)||','||var_test2(3)); var_test1(2) := 'test1.2_update'; dbms_output.put_line('==== 修改了var_test1(2) ===='); dbms_output.put_line('var_test1: '||var_test1(1)||','||var_test1(2)||','||var_test1(3)); dbms_output.put_line(var_test1.next(3)); dbms_output.put_line('var_test2元素个数: '||var_test2.limit()); end;
嵌套表的元素可以是集合,注意赋值的时候是varray_element.record_column := 的形式.
除了构造函数外,集合还有很多内建函数,按照面向对象编成的叫法称之为方法。
方法==========描述====================================================================使用限
制
COUNT=========返回集合中元素的个数
DELETE========删除集合中所有元素
DELETE(x)=====删除元素下标为x的元素===================================================对
VARRAY非法
DELETE(x,y)===删除元素下标从X到Y的元素================================================对
VARRAY非法
EXIST(x)======如果集合元素x已经初始化,则返回TRUE, 否则返回FALSE
EXTEND========在集合末尾添加一个元素==================================================对
Index_by非法
EXTEND(x)=====在集合末尾添加x个元素===================================================对
Index_by非法
EXTEND(x,n)===在集合末尾添加元素n的x个副本============================================对
Index_by非法
FIRST=========返回集合中的第一个元素的下标号,对于VARRAY集合始终返回1。
LAST==========返回集合中最后一个元素的下标号, 对于VARRAY返回值始终等于COUNT.
LIMIT=========返回VARRY集合的最大的元素个数
===========================================Index_by集合和嵌套表无用
NEXT(x)=======返回在第x个元素之后及紧挨着它的元素的值,如果x是最后一个元素,返回null.
PRIOR(x)======返回在第x个元素之前紧挨着它的元素的值,如果x是第一个元素,则返回null。
TRIM==========从集合末端开始删除一个元素==============================================对于
index_by不合法
TRIM(x)=======从集合末端开始删除x个元素===============================================对
index_by不合法
********************************************************************************************
记录可以定义为:
TYPE 类型名 IS RECORDER (具休类型)
也可用:变量名 表名%ROWTYPE
例子:
隐式定义记录中,我们不用描述记录的每一个域,在声明记录变量时使用%ROWTYPE命令定义与数据库表,
视图,游标有相同结构的记录。
有一些PL/SQL指令在使用隐式定义记录时没有使用%ROWTYPE属性,比如游标FOR循环或触发器中的:old
和:new记录
declare t_record1 test%rowtype; cursor cur_test(v_id in varchar2) is select id,mc from test where id <= v_id; t_record2 cur_test%rowtype; begin for row_test in cur_test('333') loop t_record1.id := row_test.id; t_record1.mc := row_test.mc; t_record2.id := row_test.id; t_record2.mc := row_test.id; dbms_output.put_line('t_record1:'||t_record1.id||'---'||t_record1.mc); dbms_output.put_line('t_record2:'||t_record2.id||'---'||t_record2.mc); dbms_output.put_line('row_test:'||row_test.id||'---'||row_test.mc); dbms_output.put_line('================loop '||cur_test%rowcount||' times.'); end loop; exception when others then dbms_output.put_line(sqlcode||sqlerrm); end; ====================================================================================== declare type t_record is record ( id test.id%type, mc test.mc%type ); var_record t_record; counter number default 0; begin for row_test in (select id,mc from test) loop counter := counter + 1; var_record.id := row_test.id; var_record.mc := row_test.mc; dbms_output.put_line('var_record:'||var_record.id||'---'||var_record.mc); dbms_output.put_line('row_test:'||row_test.id||'---'||row_test.mc); dbms_output.put_line('================loop '||counter||' times.'); end loop; exception when others then dbms_output.put_line(sqlcode||sqlerrm); end;
转载自http://www.111cn.net/database/Oracle/41204.htm
发表评论
-
Oracle 连接故障的排查
2014-04-10 16:33 729Oracle 连接故障的排查 1、 故障现象 通 ... -
系统共享内存的修改(ORA-27102: out of memory)
2014-04-10 16:24 776今天做压力测试的时候,修改数据参数出现ORA-27102: ... -
Oracle的AWR报告分析
2014-04-10 16:23 650今晚来分析一下awr报告,首先说一下什么是awr报告,它能给 ... -
oracle 10g Enterprise Manager 无法连接到数据库实例分析
2014-03-27 17:40 9701 问题描述客户端通过IE 浏览器登陆oracle 10g ... -
linux Oracle服务启动&停止脚本与开机自启动
2014-03-27 17:39 1000在CentOS 6.3下安装完Oracl ... -
plsql设置
2012-12-25 17:54 8411.设置date类型显示格式 TOOLS(工具)——> ... -
Oracle date timestamp 时间函数总结
2012-12-21 11:30 1123yyyy-mm-dd hh24:mi:ss.ff 年-月-日 ... -
oracle异常收集
2012-12-21 11:14 8331. ORA-12516: TNS: 监听程序找不到符合协议 ... -
oracle基础sql语句二
2012-12-21 10:03 686linux 切换oracel用户: su oracle ... -
修改oracle数据库的字符集
2012-12-21 09:58 1015SHUTDOWN IMMEDIATE;STARTUP MOUN ... -
Oracle对象类型详解
2012-03-26 14:38 1307一、抽象数据类型1、创建类型--地址类型CREATE O ... -
oracle问题收集一
2011-08-30 15:37 12441.dblink创建语法 --删除dblink dr ... -
Oracle自治事务pragma autonomous_transaction的介绍
2011-08-05 15:20 1605transaction has no link to the ... -
oracle中用START WITH...CONNECT BY PRIOR子句实现递归查询
2011-08-05 15:03 957今天发现在oracle中的sele ... -
oracle树中prior的用法
2011-08-05 15:02 1776在oracle生成树时,prior ... -
事务中的Savepoints
2011-07-29 09:59 775事务中的Savepoints 你可以在事务上下文中声明称为sa ... -
Oracle参数游标
2011-07-29 09:55 873一、参数游标 参数 ... -
PLSQL(语法--异常处理--游标--存储过程--触发器--oracle分页)
2011-07-08 17:00 1300《PL/SQL编程》 ... -
用pl/sql developer导出表结构和数据
2011-06-24 11:45 1299点击Tools--Export User Objects 这 ... -
Oracle学习笔记一:体系结构
2011-06-24 11:40 748http://blog.csdn.net/chenmo_zha ...
相关推荐
### Oracle 数组类型 #### VARRAY (Variable Array) `VARRAY` 是一种固定大小的数组结构,它能够存储相同数据类型的多个值。`VARRAY` 的最大长度在定义时就已经确定,之后不能更改。在存储过程中使用 `VARRAY` ...
在这个例子中,我们创建了一个`OracleParameter`,设置了它的类型为`OracleDbType.Object`,值为我们的自定义数组类型实例,同时指定`UdtTypeName`为我们在Oracle中定义的UDT名称。 注意,如果是在.NET Core环境中...
通过阅读和执行这些脚本,读者能掌握如何在PL/SQL中进行数据操作、数据转换、数据聚合,以及如何使用PL/SQL进行数据库编程,包括调用系统包、处理PL/SQL记录类型、游标变量以及数组等高级特性。 总的来说,这个资料...
可以使用 Oracle 自带的数组类型,也可以自定义数组类型。 使用 Oracle 自带的数组类型: ```sql CREATE OR REPLACE PROCEDURE test(y OUT array) IS x array; BEGIN x := NEW array(); y := x; END test; ``` ...
在Oracle数据库中,可变数组(VARRAY)是一种特殊类型的集合数据结构,类似于我们通常理解的数组,但提供了更强大的功能和灵活性。根据给定文件中的描述,“可变数组与嵌套表相似,也是一种集合。一个可变数组是对象...
例如,NUMBER类型可以映射为C的double或long类型,VARCHAR2可以映射为char数组。 5. **错误处理**:Oracle的错误处理机制在Pro*C中体现为异常处理。程序可以通过检查oci_error()函数返回的错误信息来捕获和处理...
本篇文章将深入探讨Oracle对JSON字符串的处理实例。 首先,Oracle 12c及更高版本引入了JSON相关的数据类型和函数,如`JSON_OBJECT`和`JSON_ARRAY`用于创建JSON,`JSON_VALUE`和`JSON_QUERY`用于提取数据,以及`JSON...
- PL/SQL支持多种类型的集合,如数组和关联数组,它们允许一次性处理多个值。例如,可以创建一个PL/SQL表类型,然后声明该类型的变量来存储一系列值。 8. **例外处理**: - `EXCEPTION`部分用于捕获和处理运行时...
以下是一个简单的示例,展示如何处理自定义数组类型的输入和输出: ```java // 假设已有Java数组 String[] userSeqIdArray = ...; String[] usernameArray = ...; // 创建Oracle连接 OracleConnection oraConn = ...
本操作手册旨在深入解析Oracle 10g的使用,特别是其数据类型的详细信息,同时通过PowerDesigner的实例教程,帮助初学者快速入门并积累实践经验。 一、Oracle数据类型详解 在Oracle数据库中,数据类型定义了列可以...
这个实例提供了一个简单的方法来实现这一操作。首先,我们从 Oracle 数据库的角度出发,了解如何创建一个存储过程。 1. 创建 Oracle 存储过程: 在 Oracle 中,可以使用 `CREATE OR REPLACE PROCEDURE` 语句定义一...
请注意,这种方式是用SqlSession实例来直接执行已映射的SQL语句: session.selectOne("com.yihaomen.mybatis.models.UserMapper.selectUserByID", 1) 其实还有更简单的方法,而且是更好的方法,使用合理描述参数和...
它涉及到了时间的处理、数组类型的使用以及与`EQUIMH01`表的交互,但具体的业务逻辑由于代码片段不完整而无法完全解析。在实际应用中,存储过程的完整版本将包含更多的逻辑和操作,以满足特定的业务需求。
- 如何定义和使用数组类型。 ### 7. Oracle PL/SQL 变量 这部分内容可能会详细介绍如何在PL/SQL中声明和使用变量: - 变量的声明方式。 - 如何初始化变量。 - 常见的数据类型及其用途。 ### 8. Oracle 序列索引...
5. **集合类型**:包括数组(PLS_INTEGER索引的PL/SQL表)和关联数组(索引由非数字类型的值定义),以及如何在集合中插入、删除和迭代元素。 6. **包(PACKAGE)**:创建和使用包来组织相关的过程和函数,实现模块...
使用Oracle自带的数组类型 **语法格式**: ```sql variable_name array_type; ``` **示例**: ```sql CREATE OR REPLACE PROCEDURE test (y OUT array_type) IS x array_type; BEGIN x := NEW array_type(); y :=...
在Oracle 11g中,可以定义多种复杂的数据类型,包括对象类型、嵌套表类型以及变长数组类型等。 #### 1.1 对象类型 (Object Types) 对象类型允许用户自定义复杂的结构化数据类型。例如,`ADDRESS_TY` 和 `ANIMAL_TY...
然后,你可以通过`CallableStatement`来调用存储过程或函数,特别是对于返回Oracle特定类型的情况,如索引表或数组。 ```java public class TestJdbcTest { // ... public static void main(String[] args) { ...
本篇将详细介绍如何利用Java操作Oracle数据库,特别是如何利用ARRAY和TABLE类型进行批量插入。 首先,了解Oracle的ARRAY和TABLE类型。ARRAY类型是固定大小的一维数组,可以存储相同类型的元素。TABLE类型则更加灵活...
数组的使用包括Oracle内置的数组类型和自定义的数组类型。 1. 使用Oracle内置数组类型,需要先初始化: ```sql CREATE OR REPLACE PROCEDURE test(y OUT array) IS x array; BEGIN x := new array(); y := x;...