源文地址:http://blog.itpub.net/750077/viewspace-2134222/

经常看到SQLSERVER 中用表变量类型的方式就能做到缓存一个比较大的中间结果,
然后再对这个表变量做处理,非常方便,那么ORACLE有这种表变量的方式处理中间结果么
实验后发下你用如下方法可以起到SQL SERVER里表变量的作用

1 创建基础数据表

  1. create table T_TEST_PIP(
  2. ID VARCHAR(10),
  3. TT DATE,
  4. DATA_ VARCHAR2(60)
  5. )

SELECT *
    FROM T_TEST_PIP

2 创建记录行类型

  1. create or replace type row_data as object ( id number,
  2. time date,
  3. data varchar2(60)
  4. );

3 创建行集合类型

  1. create or replace type rows_array as table of row_data;

4 封装查询结果到行集合类型里

  1. create or replace function f_test_array
  2. (
  3. n in number default null
  4. )
  5. return rows_array as --RETURN out_rec_set PIPELINED IS
  6. t_array rows_array := rows_array();
  7. --id1 number;
  8. --time1 date;
  9. --data1 varchar2(60);
  10. BEGIN
  11. FOR i in 1..3
  12. LOOP
  13. t_array.extend();
  14. --把一个相对复杂SQL查询出的结果,放入行集合类型
  15. SELECT
  16. ROW_DATA (T.ID ,T.TT ,CASE
  17. WHEN T.DATA_ IS NULL
  18. THEN ''
  19. ELSE T.DATA_
  20. END)
  21. INTO
  22. t_array(i)
  23. FROM
  24. T_TEST_PIP T
  25. WHERE
  26. id = i
  27. GROUP BY
  28. T.ID
  29. , T.TT
  30. , T.DATA_
  31. ;
  32.  
  33. END LOOP;
  34. dbms_output.put_line('test '
  35. ||t_array(1).ID);
  36. return t_array;
  37. END;

5 从行集合类型里取数据

  1. select * from table(f_test_array());

6 应用行集合类型和其他表联合

  1. SELECT *
  2. FROM table(f_test_array()) T1
  3. ,table(f_test_array()) T2
  4. ,T_TEST_PIP T3
  5. WHERE T1.ID = T2.ID
  6. AND T1.ID = T3.ID ;

转载 ORACLE中实现表变量的方法的更多相关文章

  1. 向oracle中的表插入数据的方法

    向oracle中的表插入数据的方法有以下几种: 假设表名为User 第一种方法:select t.*,rowid from User t;-->点击钥匙那个标记就可向表中添加数据 第二种方法:s ...

  2. Oracle中的 UPDATE FROM 解决方法

    转:http://www.cnblogs.com/JasonLiao/archive/2009/12/23/1630895.html Oracle中的 UPDATE FROM 解决方法 在表的更新操作 ...

  3. (转)DedeCms Runphp 标签中调用其他变量的方法

    DedeCms Runphp 标签中调用其他变量的方法 我们都知道,在DedeCMS中是可以使用PHP的,常见的方法就是if else了,例如模板制作中,我们需要对来源和作者进行判断,如果为空,则提示 ...

  4. Oracle中对列加密的方法

    Oracle中对列加密的方法 2011-12-22 17:21:13 分类: Linux Oracle支持多种列加密方式: 1,透明数据加密(TDE):create table encrypt_col ...

  5. 如何在Oracle中建立表和表空间?

    1.建表空间 ORACLE中,表空间是数据管理的基本方法,所有用户的对象要存放在表空间中,也就是用户有空间的使用权,才能创建用户对象.否则是不充许创建对象,因为就是想创建对象,如表,索引等,也没有地方 ...

  6. Oracle 导出空表的新方法(彻底解决)

    背景 使用Exp命令在oracle 11g 以后不导出空表(rowcount=0),是最近在工作中遇到一个很坑的问题,甚至已经被坑了不止一次,所以这次痛定思痛,准备把这个问题彻底解决.之所以叫新方法, ...

  7. 清空SQL Server数据库中所有表数据的方法(转)

    清空SQL Server数据库中所有表数据的方法 其实删除数据库中数据的方法并不复杂,为什么我还要多此一举呢,一是我这里介绍的是删除数据库的所有数据,因为数据之间可能形成相互约束关系,删除操作可能陷入 ...

  8. 【转】Oracle中dual表的用途介绍

    原文:Oracle中dual表的用途介绍 [导读]dual是一个虚拟表,用来构成select的语法规则,oracle保证dual里面永远只有一条记录.我们可以用它来做很多事情. dual是一个虚拟表, ...

  9. 清空SQL Server数据库中所有表数据的方法

    原文:清空SQL Server数据库中所有表数据的方法 其实删除数据库中数据的方法并不复杂,为什么我还要多此一举呢,一是我这里介绍的是删除数据库的所有数据,因为数据之间可能形成相互约束关系,删除操作可 ...

随机推荐

  1. curl命令踩的坑

    使用curl命令执行get请求,带多个参数: curl localhost:/user/binding/query?userId=&wrapperId=&from=test [] [] ...

  2. 【mlflow】打包:npm run build + python setup.py sdist

    mlflow是一个开源机器学习平台 最近需要使用一个它的最新版本,但是这个最新版本没有git包,无法通过pip install安装,需要打包安装. 打包完之后在项目的dist文件夹中有打包后的压缩包, ...

  3. centos shell脚本编程2 if 判断 case判断 shell脚本中的循环 for while shell中的函数 break continue test 命令 第三十六节课

    centos  shell脚本编程2 if 判断  case判断   shell脚本中的循环  for   while   shell中的函数  break  continue  test 命令   ...

  4. mysql修改端口经验

    mysql更改端口修改/etc/my.cnf添加port=3308修改后如下[mysqld]datadir=/var/lib/mysqlsocket=/var/lib/mysql/mysql.sock ...

  5. Java-idea-常用技巧-转maven,解决包依赖冲突

    1.Intellij IDEA如何将普通工程转换成maven工程 项目上右键 Add Framework Support,选择maven 2.Intellij IDEA 自动生成 serialVers ...

  6. 最长括号化长度 java

    1:求最长括号, ()(()()( 例如,它的最长符合括号化的长度为4 package com.li.huawei; import java.util.Arrays; import java.util ...

  7. Amber安装并行

    现在简单介绍一下amber12中安装openmpi并行的过程. 1. 下载openmpi版本在1.5-1.9之间的(openmpi-1.6.5.tar.bz2) 这是因为$AMBERHOME/Ambe ...

  8. 手把手教你学node.js之一个简单的express应用

    一个简单的express应用 目标 建立一个 lesson1 项目,在其中编写代码.当在浏览器中访问 http://localhost:3000/ 时,输出 Hello World. 挑战 访问 ht ...

  9. Python 开发工具和框架安装

    引言: 其实之前对于 Python,只是知道有这门语言而已.大部分还是使用 .net 开发的,之前也学了 MVC+EF 开发,但是由于工作上完全用不到,也就没有在博客记录学习的东西了. 最近又接触到了 ...

  10. 002-字段不为null

    1.尽量不要在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,强烈建议where涉及的列,不要留空,创建表时赋予初始值. 比如 select id from ...