oracle中的extend

本文介绍了Oracle中数组的操作方法,包括如何初始化数组、扩展数组空间及为新增元素赋值等。此外,还详细讲解了Oracle数据库的逻辑存储结构,从表空间到数据块的构成层级。
扩展已知的数组空间,例:

DECLARE
 
    TYPE   CourseList   IS   TABLE   OF   VARCHAR2(10);
      courses   CourseList;
BEGIN
      --   初始化数组元素,大小为3
      courses   :=   CourseList( 'Biol   4412 ',   'Psyc   3112 ',   'Anth   3001 ');
      --   为数组增加一个元素,数组大小为4,末尾的元素为NULL
      courses.EXTEND;     --   append   one   null   element
      --   为增加的元素赋值,如果没用EXTEND,这里会出错
      courses(4)   :=   'Engl   2005 ';
end

Oracle   在逻辑上是由各个表空间(tablespace)构成的,
tablespace由segments(段)构成
段是由extends构成   中文叫作区   或者数据区

区是由一个一个的数据块构成   数据块的大小由操作系统决定。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/28713356/viewspace-1220828/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/28713356/viewspace-1220828/

### Oracle TABLE 函数使用说明 #### 什么是TABLE函数? `TABLE` 函数用于将嵌套表或集合作为查询的一部分来操作。它可以将复杂的数据结构转换为行和列的形式,从而允许通过标准SQL语句访问这些数据[^4]。 #### 使用场景 `TABLE` 函数通常与PL/SQL中的集合类型(如`VARRAY` 或 `NESTED TABLE`)一起使用。它可以在不创建物理表的情况下,直接从内存中的集合或其他数据源中提取并展示数据。 --- #### 创建必要的对象 为了演示`TABLE`函数的用法,首先需要定义一些自定义类型: ```sql -- 定义对象类型 CREATE OR REPLACE TYPE obj_table_1 AS OBJECT ( fileid VARCHAR2(4000), filename VARCHAR2(4000) ); / -- 定义基于对象类型的集合类型 CREATE OR REPLACE TYPE t_table_1 IS TABLE OF obj_table_1; / ``` 上述代码分别定义了一个对象类型`obj_table_1` 和一个集合类型`t_table_1`,后者表示一组`obj_table_1` 类型的对象[^1]。 --- #### 示例:使用TABLE函数查询集合数据 假设有一个PL/SQL块生成了一些数据,并将其存储在一个集合变量中。可以通过`TABLE`函数将这个集合转化为表格形式进行查询。 ##### PL/SQL块准备数据 ```sql DECLARE v_data t_table_1 := t_table_1(); -- 初始化集合变量 BEGIN -- 向集合中添加元素 v_data.EXTEND; v_data(v_data.COUNT) := obj_table_1('ID1', 'File_A.txt'); v_data.EXTEND; v_data(v_data.COUNT) := obj_table_1('ID2', 'File_B.txt'); -- 插入更多数据... -- 将集合传递给外部查询 INSERT INTO some_table (file_id, file_name) SELECT column_value.fileid, column_value.filename FROM TABLE(v_data); -- 使用TABLE函数展开集合 COMMIT; END; / ``` 在这个例子中,`v_data` 是一个集合变量,包含了多个`obj_table_1` 对象。通过`TABLE`函数,可以将集合的内容当作虚拟表来进行查询。 --- #### 查询集合内容 如果想直接查看集合中的数据而不插入到其他表中,可以直接执行如下SQL语句: ```sql SELECT * FROM TABLE(t_table_1( obj_table_1('ID1', 'File_A.txt'), obj_table_1('ID2', 'File_B.txt') )); ``` 这段代码展示了如何利用`TABLE`函数即时构建并查询一个临时数据集。注意这里不需要提前创建任何实际的数据库表。 --- #### 结合管道函数使用 `TABLE`函数还可以与管道函数联合使用,进一步增强灵活性。例如下面的例子展示了如何结合管道化输出实现动态结果集: ##### 管道函数定义 ```sql CREATE OR REPLACE FUNCTION get_files RETURN t_table_1 PIPELINED IS BEGIN PIPE ROW(obj_table_1('ID1', 'File_A.txt')); PIPE ROW(obj_table_1('ID2', 'File_B.txt')); RETURN; END; / ``` ##### 调用管道函数并通过TABLE查询 ```sql SELECT * FROM TABLE(get_files()); ``` 以上方法能够高效地返回由管道函数产生的多条记录,并且支持复杂的业务逻辑处理。 --- ### 总结 - `TABLE` 函数提供了一种机制,使得可以从非传统的关系型数据源(比如数组、集合等)读取数据。 - 配合自定义类型以及管道函数,能极大提升程序设计上的自由度和效率。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值