ORACLE中实现表变量的方法

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

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

    1 创建基础数据表
    create table T_TEST_PIP(
       ID VARCHAR(10),
       TT DATE,
       DATA_ VARCHAR2(60)
 )

 SELECT *
    FROM T_TEST_PIP
 
    2 创建记录行类型
 create or replace type row_data as object (
     id number,
     time date,
     data varchar2(60)
    );
    3 创建行集合类型
 create or replace type rows_array as table of row_data;
   
 4 封装查询结果到行集合类型里
    create or replace function f_test_array(n in number default null) return rows_array as --RETURN out_rec_set PIPELINED IS
       t_array rows_array := rows_array();
       --id1 number;
       --time1 date;
       --data1 varchar2(60);
     BEGIN
       FOR i in 1..3 LOOP
     t_array.extend();
     --把一个相对复杂SQL查询出的结果,放入行集合类型
     SELECT   ROW_DATA (T.ID
        ,T.TT
        ,CASE WHEN T.DATA_ IS NULL THEN '111'
           ELSE T.DATA_
         END) INTO t_array(i)
     FROM   T_TEST_PIP T
     WHERE  id = i
     GROUP BY T.ID,T.TT,T.DATA_;

       END LOOP;
       dbms_output.put_line('test '||t_array(1).ID);
       return t_array;
     END;

    5 从行集合类型里取数据
    select * from table(f_test_array());
 
 6 应用行集合类型和其他表联合 
 SELECT *
 FROM table(f_test_array()) T1
  ,table(f_test_array()) T2
  ,T_TEST_PIP T3
 WHERE T1.ID = T2.ID
 AND   T1.ID = T3.ID ;

目录
相关文章
|
11天前
|
SQL 存储 Oracle
Oracle的PL/SQL定义变量和常量:数据的稳定与灵动
【4月更文挑战第19天】在Oracle PL/SQL中,变量和常量扮演着数据存储的关键角色。变量是可变的“魔术盒”,用于存储程序运行时的动态数据,通过`DECLARE`定义,可在循环和条件判断中体现其灵活性。常量则是不可变的“固定牌”,一旦设定值便保持不变,用`CONSTANT`声明,提供程序稳定性和易维护性。通过 `%TYPE`、`NOT NULL`等特性,可以更高效地管理和控制变量与常量,提升代码质量。善用两者,能优化PL/SQL程序的结构和性能。
|
6月前
|
Oracle 关系型数据库
Oracle新建数据表的两种方法
Oracle新建数据表的两种方法
|
4月前
|
Oracle 关系型数据库 数据库
Oracle查询优化-复制表的定义及数据
【1月更文挑战第5天】【1月更文挑战第14篇】在Oracle数据库中,复制表定义和复制表数据是两个常见的操作。
52 1
|
8月前
|
存储 SQL Oracle
Oracle数据库批量删除表、视图、序列、存储过程、函数脚本
Oracle数据库批量删除表、视图、序列、存储过程、函数脚本
68 0
|
11天前
|
SQL Oracle 安全
Oracle的PL/SQL异常处理方法:守护数据之旅的“魔法盾”
【4月更文挑战第19天】Oracle PL/SQL的异常处理机制是保障数据安全的关键。通过预定义异常(如`NO_DATA_FOUND`)和自定义异常,开发者能优雅地管理错误。异常在子程序中抛出后会向上传播,直到被捕获,提供了一种集中处理错误的方式。理解和善用异常处理,如同手持“魔法盾”,确保程序在面对如除数为零、违反约束等挑战时,能有效保护数据的完整性和程序的稳定性。
|
2月前
|
存储 Oracle 关系型数据库
Oracle系列之七:表的创建与管理
Oracle系列之七:表的创建与管理
|
5月前
|
SQL Oracle 关系型数据库
Oracle之替代OR的另一种方法
Oracle之替代OR的另一种方法
76 0
|
5月前
|
Oracle 关系型数据库
Oracle - 表操作语句
Oracle - 表操作语句
25 0
|
8月前
|
存储 Oracle Java
[亲测可用]hibernate调用Oracle存储过程|Spring Data JPA调用Oracle存储过程方法
[亲测可用]hibernate调用Oracle存储过程|Spring Data JPA调用Oracle存储过程方法
|
8月前
|
Oracle 关系型数据库 数据库
Oracle数据库 查询所有表
Oracle数据库 查询所有表
118 1

推荐镜像

更多