- 浏览: 470547 次
文章分类
最新评论
-
datawarehouse:
来学习了。
什么是informatic? -
nange223:
感谢分享,学习了
一些数据库监控,优化,管理工具 -
pianxibin:
ertrth thr dj dyj
一些数据库监控,优化,管理工具 -
gekky6:
多谢分享,学习下
一些数据库监控,优化,管理工具 -
lqlein:
好好学习学习
一些数据库监控,优化,管理工具
1、cast:强制转换成指定的数据类型。
2、multiset:转换成定义好的类型。
3、 table()函数
参考http://www.itpub.net/showthread.php?threadid=617298
PL/SQL表---table()函数用法
PL/SQL表---table()函数用法:
利用table()函数,我们可以将PL/SQL返回的结果集代替table。
simple example:
1、table()结合数组:
*/
create or replace type t_test as object(
id integer,
rq date,
mc varchar2(60)
);
create or replace type t_test_table as table of t_test;
create or replace function f_test_array(n in number default null) return t_test_table
as
v_test t_test_table := t_test_table();
begin
for i in 1 .. nvl(n,100) loop
v_test.extend(); -- append one null element
-- 为增加的元素赋值,如果没用EXTEND,这里会出错
v_test(v_test.count) := t_test(i,sysdate,'mc'||i);
end loop;
return v_test;
end f_test_array;
/
select * from table(f_test_array(10));
/*
2、table()结合PIPELINED函数:
*/
create or replace function f_test_pipe(n in number default null) return t_test_table PIPELINED
as
v_test t_test_table := t_test_table();
begin
for i in 1 .. nvl(n,100) loop
pipe row(t_test(i,sysdate,'mc'||i));
end loop;
return;
end f_test_pipe;
/
select * from table(f_test_pipe(20));
/*
3、table()结合系统包:
*/
create table test (id varchar2(20));
insert into test values('1');
commit;
explain plan for select * from test;
select * from table(dbms_xplan.display);
tablespace由segments(段)构成
段是由extends构成 中文叫作区 或者数据区
区是由一个一个的数据块构成 数据块的大小由操作系统决定。
A
B
C
D
E
在实际的应用中,为了让PL/SQL 函数返回数据的多个行,必须通过返回一个 REF CURSOR 或一个数据集合来完成。REF CURSOR 的这种情况局限于可以从查询中选择的数据,而整个集合在可以返回前,必须进行具体化。
Oracle 9i 通过引入的管道化表函数纠正了后一种情况。表函数是返回整个行的集(通常作为一个集合)的函数,可以直接从 SQL 语句中进行查询,就好像它是一个真正的数据库表一样。管道化表函数与之相似,但是它像在构建时一样返回数据,而不是一次全部返回。管道化表函数更加有效,因为数据可以尽可能快地返回。
管道化表函数必须返回一个集合。在函数中,PIPE ROW 语句被用来返回该集合的单个元素,该函数必须以一个空的 RETURN 语句结束,以表明它已经完成。一旦我们创建了上述函数,我们就可以使用 TABLE 操作符从 SQL 查询中调用它。
管道化表函数经常被用来把数据从一种类型转化成另一种类型。
下面是用Pipelined Table实现split函数的示例:
CREATE OR REPLACE TYPE ty_str_split IS TABLE OF VARCHAR2 (4000);
CREATE OR REPLACE FUNCTION fn_split (p_str IN VARCHAR2, p_delimiter IN VARCHAR2)
RETURN ty_str_split PIPELINED
IS
j INT := 0;
i INT := 1;
len INT := 0;
len1 INT := 0;
str VARCHAR2 (4000);
BEGIN
len := LENGTH (p_str);
len1 := LENGTH (p_delimiter);
WHILE j < len
LOOP
j := INSTR (p_str, p_delimiter, i); -----instr(待匹配的字符串,匹配字符串,开始位置,匹配次数)
IF j = 0
THEN
j := len;
str := SUBSTR (p_str, i);
PIPE ROW (str);
IF i >= len
THEN
EXIT;
END IF;
ELSE
str := SUBSTR (p_str, i, j - i); ----取得字符串中指定起始位置和长度的字符串 substr( string, start_position, [ length ] )
i := j + len1;
PIPE ROW (str);
END IF;
END LOOP;
RETURN;
END fn_split;
/
测试:
SELECT * FROM TABLE (fn_split ('1;;12;;123;;1234;;12345', ';;'));
结果:
1
12
123
1234
12345
又一个简单的例子:
CREATE TYPE mytype AS OBJECT (
field1 NUMBER,
field2 VARCHAR2 (50)
);
CREATE TYPE mytypelist AS TABLE OF mytype;
CREATE OR REPLACE FUNCTION pipelineme
RETURN mytypelist PIPELINED
IS
v_mytype mytype;
BEGIN
FOR v_count IN 1 .. 20
LOOP
v_mytype := mytype (v_count, 'Row ' || v_count);
PIPE ROW (v_mytype);
END LOOP;
RETURN;
END pipelineme;
SELECT * FROM TABLE (pipelineme);
FIELD1 FIELD2
------ ------------------------
1 Row 1
2 Row 2
3 Row 3
4 Row 4
5 Row 5
6 Row 6
7 Row 7
8 Row 8
9 Row 9
10 Row 10
11 Row 11
12 Row 12
13 Row 13
14 Row 14
15 Row 15
16 Row 16
17 Row 17
18 Row 18
19 Row 19
20 Row 20
20 rows selected
发表评论
-
oracle分析函数row_number() over()使用
2009-12-24 16:00 2352row_number() over ([partition ... -
深入sql之merge into
2009-07-10 22:37 2237http://nodonkey.iteye.com/blog/ ... -
Oracle字符集问题总结(转)
2009-07-10 15:53 1091经常有同事咨询oracle数据库字符集相关的问题,如在不 ... -
minus/not in/not exists的原理和效率
2009-07-06 14:57 2994http://www.itpub.net/viewthread ... -
批量获取多个表的创建索引语句
2009-06-08 09:48 1605批量获取多个表的创建索引语句 一个朋友提供的set ec ... -
Truncate table,Delete,与Drop table的区别
2009-06-06 15:33 4576TRUNCATE TABLE 在功能上与不带 WHERE 子句 ... -
oracle cast() 函数问题
2009-06-02 15:03 12995SQL> create table t1(a varch ... -
db2中decimal实现oracle中trunc的方法
2009-06-02 15:00 3286在oracle中trunc的使用方法: 1.TRUNC(fo ... -
oracle是如何工作的(一个有趣的故事)
2009-06-01 14:12 1204转自http://bbs3.chinaunix.net/v ... -
表约束的巧用
2009-06-01 14:08 8061、问题: 表中的一個欄位,現在是VARCHAR2(8)型的 ... -
BLOB和CLOB区别和定义
2009-06-01 11:16 10223BLOB和CLOB区别和定义 LON ... -
Oracle中忘记System和Sys密码后的处理方法
2009-05-06 21:21 1364Oracle提供两种验证方式,一种是OS验证,另一种密码文件验 ... -
Oracle SQL*Loader 使用指南(解决插入大量的数据)
2009-04-27 11:21 1611我的理解; 如果表的属性是NOLOGG ... -
数据字典——数据库概念
2009-04-24 09:37 1524来自:http://yangtingkun.itpub.net ... -
创建连接服务器
2009-03-30 10:53 866一般的方法是:oracle->Net manager 还 ... -
JIRA
2009-03-13 13:57 1152在cmcs學到的系統JIRA+SVN+Fisheye+Cruc ... -
Study Oracle Document Website
2009-03-12 09:32 1181http://www.siue.edu/~dbock/cmis ... -
查看表占用多少M
2009-03-03 13:40 897SQL> SELECT d.status "S ... -
汉字和字符分开(整理)--补充(所用函数说明)
2009-03-02 17:17 19131、substr() substr('This is ... -
汉字和字符分开(整理)
2009-03-02 17:11 1234SQL> create table gjtext 2 ...
相关推荐
Oracle数据库--存储过程、函数、触发器和包.pptx
title:[Oracle]--触发器加密函数利用数据库触发器和函数给数据库内容加密。加密函数一例:给数据库183添加加密函数YOURPASSWORD:手动设置
c3p0-oracle-thin-extras-0.9.2.1
Oracle数据库是世界上最广泛使用的数据库系统之一,其强大的功能在很大程度上归功于其丰富的内置函数。本篇文章将详细探讨在"oracle函数大全-数字-字符-日期-聚合函数"这个主题中涵盖的关键知识点。 首先,我们来看...
oracle11g-client-win-64客户端安装包
..oracle11基础_字符_数字_日期_转换-函数.docx
..oracle11基础_字符_数字_日期_转换-函数.pdf
本文将深入讲解Oracle中的几个核心概念:表、视图、过程、函数、游标以及异常处理,这些都是Oracle数据库管理的基础。 首先,我们来看“表”。在Oracle中,表是数据的基本存储单元,用于组织和存储相关数据。创建表...
Oracle 自定义日期函数 Oracle 日期处理函数是数据库管理系统中非常重要的一部分,最近看到有人在做 T-SQL 与 PL/SQL 的转化,问了些有关时间函数的处理。在 PL/SQL 中,Oracle 提供了其他的方法来处理日期函数,...
"oracle函数介绍(6) 著名函数之分析函数.doc","oracle函数介绍(7) 非著名函数之分析函数.doc"以及"oracle分析函数.doc"深入介绍了这些高级函数,帮助理解如何利用它们进行复杂的数据分析。 最后,"oracle函数介绍...
exp system/oracle owner=oracle file='/tmp/oracle-table-20130509.dmp' log='/tmp/oracle-table-20130509.log'; 导入用户oracle下的表: imp system/oracle file='/tmp/oracle-table-20130509.dmp' log='/...
Oracle学习笔记(嵌套表、可变数组),有具体的代码案例供大家参考
oracle-xe-client_10.2.0.1-1.0_i386.deb
[计算机软件及应用]oracle-教程-第8章-存储过程、函数和包.ppt
oracle分析函数-计算移动平均、累计、分布
在Oracle数据库系统中,多表查询是日常数据处理的关键技能,尤其对于大型企业级应用来说,数据往往分散在多个关联的表中。本篇将深入探讨Oracle中的多表查询技术,包括基本概念、联接类型、子查询以及高级查询技巧。...
oracleasm-support-2.1.8-1.el6.x86_64.rpm
Oracle Instant Client是Oracle公司提供的一款轻量级的客户端软件,主要用于在不安装完整Oracle数据库的情况下,使得应用程序能够连接到Oracle数据库。"Oracle instantclient-basic-windows.x64-11.2.0.4.0"是针对...
Oracle实验报告