- 浏览: 519193 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (299)
- Oracle(pl/sql_Erp_Pro*C) (69)
- 设计模式 (4)
- spring (23)
- ext (17)
- apache开源项目应用 (4)
- jquery (16)
- 生活琐事 (8)
- 下载资源 (23)
- mysql (2)
- Eclipse使用积累 (5)
- 报表类(报表/图表) (13)
- php (4)
- Web多彩文本框 (3)
- json (4)
- jqgrid (2)
- ant (2)
- java算法积累 (8)
- EL表达式/JSTL (4)
- poi (3)
- gwt (2)
- 爬网第一步 (2)
- javascript (17)
- Javaweb (8)
- tomcat (1)
- flex (1)
- Java&DB (3)
- J2SE (7)
- linux (3)
- 数据结构 (1)
- dot net (5)
- struts (1)
- ibatis (1)
- log4j (1)
- 项目管理 (1)
- Java native interface(jni,jacob......) (5)
- applet (1)
- VB.net/C#.net/JNI (20)
- css (1)
- Sqlite (1)
- servlet (1)
- REST (1)
最新评论
-
wenhurena:
能不能给一下解压密码roki.work.2017@gmail. ...
Ebs解体新書と学習資料1 -
liutao1600:
楼主写的太好了,每天学习~~
Spring_MVC(6)测试 -
liutao1600:
太好了,每天学习你的文章~~~
Spring_MVC(3)表单页面处理 -
liutao1600:
学习了,太好了
Spring_MVC(2)控制层处理 -
liutao1600:
学习了~~~
Spring_MVC(1)构建简单web应用
一、EXISTS函数
1、检测集合中的元素是否存在
DECLARE
TYPE DNameList IS TABLE OF VARCHAR2(14);
nameList DNameList ;
BEGIN
nameList:=DNameList(NULL,'CORESUN','CORESUN');
IF nameList.EXISTS(1) THEN
DBMS_OUTPUT.PUT_LINE('存在此元素');
ELSE
DBMS_OUTPUT.PUT_LINE('不存在此元素');
END IF;
END;
打印的结果当然是:存在此元素。虽然此元素的值是NULL,但是此元素是存在的。可以将1换成4,重新运行程序,将打印出:不存在此元素。对于可变数组来说使用方法与嵌套表相同。如果索引表使用该方法,可以传递字符串作为参数,如:
DECLARE
TYPE CoutryList IS TABLE OF NUMBER
NOT NULL INDEX BY VARCHAR2(20);
myList CoutryList;
BEGIN
myList('China'):=1;
myList('Japan'):=2;
myList('USA'):=3;
IF myList.EXISTS('China') THEN --注意键字符串区分大小写
DBMS_OUTPUT.PUT_LINE('存在此元素');
ELSE
DBMS_OUTPUT.PUT_LINE('不存在此元素');
END IF;
END;
2、当没有初始化的嵌套表变量或可变数组变量调用EXISTS函数时,不会抛出异常,而是返回FALSE,如:
DECLARE
TYPE DNameList IS TABLE OF VARCHAR2(14);
nameList DNameList ;
BEGIN
IF nameList.EXISTS(1) THEN
DBMS_OUTPUT.PUT_LINE('存在此元素');
ELSE
DBMS_OUTPUT.PUT_LINE('不存在此元素');
END IF;
END;
打印的结果是:不存在此元素。但是要注意,此时嵌套表变量nameList根本没有被初始化。后面介绍的几个集合方法,如果嵌套表变量或是可变数组变量没有被初始化,调用时将会抛出COLLECTION_IS_NULL异常。
二、COUNT函数
该函数能够返回集合中包含元素的个数。
1、检测索引表中元素的个数
DECLARE
TYPE CoutryList IS TABLE OF NUMBER
NOT NULL INDEX BY VARCHAR2(20);
myList CoutryList;
BEGIN
myList('China'):=1;
myList('Japan'):=2;
myList('USA'):=3;
DBMS_OUTPUT.PUT_LINE('此索引表中元素的个数为'||myList.COUNT);
END;
打印的结果:此索引表中元素的个数为3
2、检测可变数组元素的个数
DECLARE
TYPE DNameList IS VARRAY(10) OF VARCHAR2(14);
nameList DNameList:=DNameList('综合部','市场部','社教部',NULL);
BEGIN
DBMS_OUTPUT.PUT_LINE('此可变数组的元素个数为'||nameList.COUNT);
END;
打印结果:此变长数组的元素个数为4。注意第四个元素的值为NULL,但仍然是一个元素。虽然定义变长数组时指定的长度是10,但是COUNT函数返回的是实际的元素个数。
3、检测嵌套表元素的个数
DECLARE
TYPE DNameList IS TABLE OF VARCHAR2(14);
nameList DNameList ;
BEGIN
nameList:=DNameList(NULL,'CORESUN','CORESUN');
DBMS_OUTPUT.PUT_LINE('嵌套表元素个数为'||nameList.COUNT);
nameList.delete(2);
DBMS_OUTPUT.PUT_LINE('删除第二个元素后嵌套表元素个数为'||nameList.COUNT);
nameList(2):='CORESUN';
DBMS_OUTPUT.PUT_LINE('嵌套表元素个数为'||nameList.COUNT);
END;
打印的结果为:
嵌套表元素个数为3
删除第二个元素后嵌套表元素个数为2
嵌套表元素个数为3
注意:COUNT函数会忽略掉被DELETE方法删除的元素。
三、LIMIT函数
对于下标是字符串的索引表调用LIMIT函数时会报错,对于下标是整数的索引表调用LIMIT函数时会返回NULL。对于嵌套表来说,调用LIMIT函数时返回NULL值。对于可变数组来说返回声明时指定的值。如:
DECLARE
TYPE DNameTableList IS TABLE OF VARCHAR2(14);
nameTableList DNameTableList:=DNameTableList('综合部','市场部','社教部',NULL);
TYPE DNameArrayList IS VARRAY(10) OF VARCHAR2(14);
nameArrayList DNameArrayList:=DNameArrayList('综合部','市场部','社教部',NULL);
TYPE CoutryList IS TABLE OF NUMBER
NOT NULL INDEX BY BINARY_INTEGER;
myList CoutryList;
BEGIN
myList(1):=1;
myList(2):=2;
myList(3):=3;
DBMS_OUTPUT.PUT_LINE('索引表的LIMIT函数返回值'||myList.LIMIT);
DBMS_OUTPUT.PUT_LINE('嵌套表的LIMIT函数返回值'||nameTableList.LIMIT);
DBMS_OUTPUT.PUT_LINE('可变数组的LIMIT函数返回值'||nameArrayList.LIMIT);
END;
四、FIRST和LAST函数
这两个函数用于返回集合中第一个和最后一个元素的下标值,如果索引表使用的字符串下标,会按照字符串进行排序后返回。如果集合的长度为0,FIRST函数和LAST函数返回值都是NULL。
1、返回下标是字符串的索引表的第一个和最后一个下标
DECLARE
TYPE CoutryList IS TABLE OF NUMBER
NOT NULL INDEX BY VARCHAR2(10);
myList CoutryList;
BEGIN
myList('China'):=1;
myList('Japan'):=2;
myList('USA'):=3;
DBMS_OUTPUT.PUT_LINE('索引表的FIRST函数返回值:'||myList.FIRST);
DBMS_OUTPUT.PUT_LINE('索引表的LAST函数返回值:'||myList.LAST);
END;
结果:
索引表的FIRST函数返回值:China
嵌套表的LAST函数返回值:USA
2、返回下标是整数的索引表的第一个和最后一个下标
DECLARE
TYPE CoutryList IS TABLE OF NUMBER
NOT NULL INDEX BY BINARY_INTEGER;
myList CoutryList;
BEGIN
myList(-100):=-100;
myList(0):=0;
myList(20):=20;
DBMS_OUTPUT.PUT_LINE('索引表的FIRST函数返回值:'||myList.FIRST);
DBMS_OUTPUT.PUT_LINE('索引表的LAST函数返回值:'||myList.LAST);
END;
结果:
索引表的FIRST函数返回值:-100
嵌套表的LAST函数返回值:20
3、返回可变数组的第一个和最后一个下标
对于可变数组来说,由于不允许删除元素,所以FIRST函数值总是等于1,而LAST函数值总是等于COUNT函数值。
DECLARE
TYPE DNameArrayList IS VARRAY(10) OF VARCHAR2(14);
nameArrayList DNameArrayList:=DNameArrayList('综合部','市场部','社教部',NULL);
BEGIN
DBMS_OUTPUT.PUT_LINE('可变数组的FIRST函数返回值:'||nameArrayList.FIRST);
DBMS_OUTPUT.PUT_LINE('可变数组的LAST函数返回值:'||nameArrayList.LAST);
END;
结果:
可变数组的FIRST函数返回值:1
可变数组的LAST函数返回值:4
4、返回嵌套表的第一个和最后一个下标
嵌套表允许删除元素,所以嵌套表的的FIRST函数值总是大于或等于1,而LAST函数值总是大于或等于COUNT函数值。
DECLARE
TYPE DNameTableList IS TABLE OF VARCHAR2(14);
nameTableList DNameTableList:=DNameTableList('综合部','市场部','社教部',NULL);
BEGIN
nameTableList.delete(1);
nameTableList.delete(4);
DBMS_OUTPUT.PUT_LINE('嵌套表的FIRST函数返回值:'||nameTableList.FIRST);
DBMS_OUTPUT.PUT_LINE('嵌套表的LAST函数返回值:'||nameTableList.LAST);
END;
结果:
嵌套表的FIRST函数返回值:2
嵌套表的LAST函数返回值:3
五、PRIOR函数和NEXT函数
PRIOR(n)返回n的上一个索引值,如果n没有上一个索引值,则返回NULL。NEXT(n)返回n的下一个索引值,如果n没有下一个索引值,则返回NULL。使用PRIOR函数或NEXT函数遍历集合会更加有效,因为对于索引表来说下标可能是不连续的,对于嵌套表来说可能会插入或删除元素。以下代码通过NEXT函数遍历了嵌套表的所用值:
DECLARE
TYPE DNameTableList IS TABLE OF VARCHAR2(14);
nameTableList DNameTableList:=DNameTableList('综合部','市场部','社教部','财务部');
i INTEGER;
BEGIN
i:=nameTableList.FIRST();
WHILE i IS NOT NULL LOOP
DBMS_OUTPUT.PUT_LINE('索引为'||i||'的值为:'||nameTableList(i));
i:=nameTableList.NEXT(i);
END LOOP;
END;
结果为:
索引为1的值为:综合部
索引为2的值为:市场部
索引为3的值为:社教部
索引为4的值为:财务部
六、EXTEND过程
该过程用于扩展嵌套表和可变数组的长度,该过程不能用于索引表。该过程有三种重载形式:
EXTEND 在集合末尾添加一个NULL元素
EXTEND(n) 在集合末尾添加n个NULL元素
EXTEND(n,i)把第i个元素值拷贝n份添加到集合末尾
注意:如果在声明嵌套表或可变数组时指定了NOT NULL,那么该过程的前两种形式就不能在使用了。
使用EXTEND过程时,嵌套表情况会稍稍复杂一点,因为嵌套表可能会删除元素。以下示例演示了嵌套表元素在内存中的分布结构:
DECLARE
TYPE DNameTableList IS TABLE OF VARCHAR2(14);
nameTableList DNameTableList:=DNameTableList(NULL,'综合部','市场部','社教部');
内存结构如下:
调用nameTableList.EXTEND后结构如下:
此时nameTableList.COUNT为5,nameTableList.LAST值为5
继续如下的调用,nameTableList.EXTEND(2,3),结构如下图所示:
七、TRIM过程
TRIM过程用于删除嵌套表和可变数组末尾的元素,该过程不能用于索引表。它有以下两种重载的形式:
TRIM 从集合末尾删除一个元素
TRIM(n) 从集合末尾删除n个元素
以下示例演示了嵌套表调用TRIM过程删除元素后内存结构的变化:
DECLARE
TYPE DNameTableList IS TABLE OF VARCHAR2(14);
nameTableList DNameTableList:=DNameTableList(NULL,'综合部','市场部','社教部');
内存结构如下图所示:
当调用了nameTableList.TRIM后,结构如下图:
此时nameTableList.COUNT为3,nameTableList.LAST值为3,如果调用nameTableList(4):='CORESUN' 则会抛出SUBSCRIPT_BEYOND_COUNT异常。
八、DELETE过程
DELETE过程用于删除嵌套表和索引表的元素,该过程不能用于可变数组。它有以下三种重载的形式:
DELETE 删除集合中的所有元素,可用于可变数组,删除后集合变量为NULL。
DELETE(n) 删除索引为n的元素,不可用于可变数组。
DELETE(m,n) 删除索引从m到n的所有元素,不可用于可变数组。
以下示例演示从嵌套表中使用DELETE删除元素及元素在内存中的结构:
DECLARE
TYPE DNameTableList IS TABLE OF VARCHAR2(14);
nameTableList DNameTableList:=DNameTableList(NULL,'综合部','市场部','社教部');
调用nameTableList.DELETE(4)后,内存结构如下:
嵌套表占用的内存是动态的,删除时会被自动释放,但PL/SQL会在嵌套表中使用占位符标识该位置。此时nameTableList.COUNT为3,nameTableList.LAST值为3,如果调用nameTableList(4):='CORESUN' 则不会抛出异常,内存结构如下:
此外注意以下几种形式的调用:
nameTableList.DELETE(4,4) 删除索引为4的元素
nameTableList.DELETE(5,2) 什么都不做
nameTableList.DELETE('China') 删除索引为'China'的元素
nameTableList.DELETE('China','Japan') 删除从索引China至Japan之间的元素
发表评论
-
IBatis调用ORACLE的存储过程、函数的返回结果集例子
2012-03-05 23:31 2133import java.io.Serializabl ... -
Oracle分页函数样例——用于提高当前框架分页性能
2012-03-05 23:27 1387create or replace procedure P ... -
Oracle入门课件
2011-12-11 22:43 1011下载附件 -
自己经常上的Oracle官网的一些链接~~是啥自己点开看
2011-11-17 23:27 1117http://www.oracle.com/pls/db ... -
Oracle性能诊断艺术源码
2011-08-16 00:51 880请下载。 -
oracle support
2011-06-23 16:34 920https://support.oracle.com/CSP/ ... -
oracle 11g sql code
2011-02-24 20:55 1109附件参考 -
Oracle SQL优化
2011-01-19 23:16 877详见附件。讲述优化器。 -
Oracle PGA概念及调整
2011-01-03 23:18 1750--预备知识PGA(Process Global Area), ... -
修改Oracle SGA——防止oracle内存分配不足而down机
2011-01-03 23:16 2341在安装oracle 10g r2 数据库时,默认的SGA大 ... -
oracle SGA
2011-01-03 23:14 1365系统全局区又称SGA (System Global A ... -
Oracle 高水位概念(hwm)
2010-12-22 22:09 1435说到HWM,我们首先要简要 ... -
CDC积累的plsql用的各种例子
2010-11-09 15:49 836自用,有密码!请勿浪费时间下载。 -
oracle Erp安装和具体财务模块介绍
2010-10-11 12:54 1180http://bbs.erp100.com/thread-20 ... -
Oracle察看表约束
2010-10-08 16:07 11071、我们创建的对象可以从"USER_"开通 ... -
Oracle 行列转换积累
2010-09-29 11:36 1705行列转换包括以下六种情况:*列转行*行转列*多列转换成字符串 ... -
oracle bulk collection
2010-09-14 18:26 1256Oracle Bulk Collection & ... -
oracle discover
2010-09-03 16:28 958oracle discover -
Oracle rawtohex hextoraw
2010-09-03 15:03 3186Oracle 8.1.7 SQL> ed ... -
Oracle Raw,number,varchar2转换
2010-09-03 14:56 2262Oracle Raw,number,varchar2...转换 ...
相关推荐
Oracle字符相似度函数是Oracle数据库系统提供的一种功能,用于评估两个字符串之间的相似性。这个功能在数据清洗、信息检索、文本分析等领域具有广泛的应用。在SQL查询中,我们可以直接使用这些函数来比较不同字符串...
Oracle 中实现 Split 函数功能的优点是可以灵活地处理不同的分隔符和字符串长度。同时,这个函数也可以与其他 Oracle 函数和操作符结合使用,以实现更加复杂的数据处理任务。 在实际应用中,Oracle 中实现 Split ...
Oracle数据库中的字符函数是SQL和PL/SQL编程中不可或缺的一部分,它们主要用于处理和操作文本数据。以下是对给定文件中提到的一些主要字符函数的详细解释: 1. ASCII(n) 函数: - 该函数返回字符串的第一个字符的...
Oracle学习笔记(嵌套表、可变数组),有具体的代码案例供大家参考
将字符串分割成数组: 例如将字符串“7369,7499,7521,7844"分割成 7369 7499 7521 7844 用法:可以将分割结果做为一个数组或者数据库表列来使用 select * from scott.emp where empno in (select column_value from...
在Oracle数据库中,由于内置函数不直接支持像Java中的`split`那样拆分字符串并返回数组,因此开发者需要自定义函数来实现这一功能。这里提到的两种方法都是为了解决这个问题,即根据指定的分隔符将字符串拆分为一个...
INSTR函数则用来查找子串在目标字符串中的位置,返回值为0表示未找到。但手工编写这些查询对于大规模数据库可能非常繁琐且耗时。 这个名为"oracle遍历数据库查找字符串.jar"的工具可能实现了以下功能: 1. **连接...
3.CONCAT:连接两个字符串; SQL> select concat('010-','88888888')||'转23' 张三电话 from dual; 张三电话 ---------------- 010-88888888转23 4.INITCAP:返回字符串并将字符串的第一个字母变为大写; SQL> select ...
在Java中调用Oracle函数并处理返回的Oracle特定数据类型,如集合或索引表,通常涉及到Oracle的PL/SQL包和Java的JDBC驱动。以下是对这个主题的详细说明: 1. **Oracle索引表类型**: Oracle索引表是一种PL/SQL数据...
Oracle数据库系统内置了大量函数,这些函数可以分为多个类别,例如字符函数、数字函数、日期函数、转换函数、分组函数以及其他辅助函数等。以下是对每个类别中一些常用函数的详细介绍: 字符函数 1. ASCII函数:...
Oracle自定义函数返回一张表。主要用于生成一张等时间间隔的表数据。
- TO_CHAR/TO_DATE:将日期时间转换为字符串或将字符串转换为日期时间。 4. **转换函数** - TO_NUMBER:将字符串转换为数值。 - TO_CHAR:将数值、日期或其他类型转换为字符串。 - CAST:在不同数据类型间进行...
查询包含可变数组的表时,可以使用`TABLE`函数将可变数组转换为表进行查询。 ```sql SELECT user_comm FROM user_info WHERE user_id = 1; SELECT comm_type, comm_no FROM TABLE(SELECT user_comm FROM user_info...
Oracle数据库中的函数可以分为多种类型,包括内置函数、数学函数、字符串函数、日期时间函数、转换函数、系统信息函数等。例如: 1. **内置函数**:如`SYSDATE`用于获取当前系统日期,`USER`获取当前登录用户的...
在Oracle 10G中,函数是SQL和PL/SQL编程中不可或缺的一部分,它们用于处理数据、进行计算、操作字符串以及执行各种其他任务。本资料“Oracle 10G函数大全”显然是一份全面的参考指南,涵盖了Oracle 10G中的主要函数...
本课程"MLDN魔乐科技JAVA培训_Oracle课堂24_嵌套表、可变数组"着重讲解了Oracle数据库中的两种特殊数据结构——嵌套表和可变数组,它们在处理复杂数据时非常有用。 嵌套表,也称为集合类型,允许在一个列中存储多个...
Oracle 10G是Oracle数据库的一个重要版本,它包含了丰富的函数和特性,为数据库管理和开发提供了强大的支持。本文将深入探讨Oracle 10G中的一些关键函数,旨在帮助你更好地理解和利用这些工具。 1. **数学函数**: ...
4. 转换函数:TO_NUMBER()将字符串转换为数字,CAST()通用类型转换。 5. 控制流程函数:IFNULL()或NVL()处理空值,DECODE()用于简单的条件判断。 三、其他重要概念 1. 视图:视图是从一个或多个表中创建的虚拟表,...
11. 转换日期为字符串或者字符串为日期,使用 TO_CHAR 和 TO_DATE 函数 二、数值函数 1. 四舍五入函数 ROUND,用于对数值进行四舍五入操作 2. 求最大或最小值 MAX 和 MIN 3. 求平均值 AVG 4. 求和 SUM 三、日期和...