- 浏览: 460514 次
文章分类
最新评论
-
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 2307row_number() over ([partition ... -
深入sql之merge into
2009-07-10 22:37 2192http://nodonkey.iteye.com/blog/ ... -
Oracle字符集问题总结(转)
2009-07-10 15:53 1007经常有同事咨询oracle数据库字符集相关的问题,如在不 ... -
minus/not in/not exists的原理和效率
2009-07-06 14:57 2943http://www.itpub.net/viewthread ... -
批量获取多个表的创建索引语句
2009-06-08 09:48 1563批量获取多个表的创建索引语句 一个朋友提供的set ec ... -
Truncate table,Delete,与Drop table的区别
2009-06-06 15:33 4504TRUNCATE TABLE 在功能上与不带 WHERE 子句 ... -
oracle cast() 函数问题
2009-06-02 15:03 12957SQL> create table t1(a varch ... -
db2中decimal实现oracle中trunc的方法
2009-06-02 15:00 3227在oracle中trunc的使用方法: 1.TRUNC(fo ... -
oracle是如何工作的(一个有趣的故事)
2009-06-01 14:12 1156转自http://bbs3.chinaunix.net/v ... -
表约束的巧用
2009-06-01 14:08 7581、问题: 表中的一個欄位,現在是VARCHAR2(8)型的 ... -
BLOB和CLOB区别和定义
2009-06-01 11:16 10146BLOB和CLOB区别和定义 LON ... -
Oracle中忘记System和Sys密码后的处理方法
2009-05-06 21:21 1332Oracle提供两种验证方式,一种是OS验证,另一种密码文件验 ... -
Oracle SQL*Loader 使用指南(解决插入大量的数据)
2009-04-27 11:21 1566我的理解; 如果表的属性是NOLOGG ... -
数据字典——数据库概念
2009-04-24 09:37 1472来自:http://yangtingkun.itpub.net ... -
创建连接服务器
2009-03-30 10:53 824一般的方法是:oracle->Net manager 还 ... -
JIRA
2009-03-13 13:57 1113在cmcs學到的系統JIRA+SVN+Fisheye+Cruc ... -
Study Oracle Document Website
2009-03-12 09:32 1139http://www.siue.edu/~dbock/cmis ... -
查看表占用多少M
2009-03-03 13:40 849SQL> SELECT d.status "S ... -
汉字和字符分开(整理)--补充(所用函数说明)
2009-03-02 17:17 18671、substr() substr('This is ... -
汉字和字符分开(整理)
2009-03-02 17:11 1188SQL> create table gjtext 2 ...
相关推荐
oracle-xe-11.2.0-1.0.x86_64.rpm
Oracle数据库--存储过程、函数、触发器和包.pptx
oracle-database-preinstall-19c-1.0-1.el7.x86_64.rpm
Oracle-Form-Builder各种函数精讲.doc
title:[Oracle]--触发器加密函数利用数据库触发器和函数给数据库内容加密。加密函数一例:给数据库183添加加密函数YOURPASSWORD:手动设置
c3p0-oracle-thin-extras-0.9.2.1
oracle函数大全-数字处理函数,包括数字、字符串处理函数
oracle资料大全--函数,编程大全oracle资料大全--函数,编程大全oracle资料大全--函数,编程大全oracle资料大全--函数,编程大全
oracle基础--表、视图、过程、函数、游标、异常
oracle-rdbms-server-11gR2-preinstall-1.0-4.el7.x86_64.rpm
cx_Oracle-5.1.3-11g.win-amd64-py2.7.exe Python 2.7 lib for Oracle 11g.
oracle database server 12cR2 preinstall x86_64 rpm
oracle-database-preinstall 。 base压缩包下是需要的一些依赖包,也可直接部署,离线安装数据库
oracle函数大全,数字函数,字符函数,日期函数,聚合函数 的合集
oracle11g-client-win-64客户端安装包
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='/...