`
izuoyan
  • 浏览: 8880953 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

pl/sql中使用table()函数的例子

SQL 
阅读更多

1.创建type,必须是单独的type,在pkg中的不行

CREATE OR REPLACE TYPE obj_txb_xb97 as TxbLE OF rec_xb97;

CREATE OR REPLACE TYPE rec_xb97 AS OBJECT
(
xoe001 NUMBER(18),
xxe901 NUMBER(18),
xxe140 VARCHAR2(3),
xxe210 VARCHAR2(3),
xxb210 NUMBER(18, 2),
xxb130 NUMBER(18, 2),
xxb019 VARCHAR2(3),
xxb020 VARCHAR2(3),
xxb021 VARCHAR2(3),
xxb022 VARCHAR2(3),
xxb200 VARCHAR2(20),
xxe151 VARCHAR2(3),
xxe099 VARCHAR2(3)
);

2.创建转换

/****************************
返回xb97对象用于txble函数
written by:wonder
modified by:
****************************/
FUNCTION fun_a_returnxb97type(prm_txb_xb97 IN typ_txb_xb97)
RETURN obj_txb_xb97 IS
v_row rec_xb97 := NULL;
t_xb97 obj_txb_xb97 := obj_txb_xb97();
BEGIN
-- 初始化

FOR i IN 1 .. prm_txb_xb97.COUNT LOOP
t_xb97.EXTEND();
v_row := NEW rec_xb97(prm_txb_xb97(i).xoe001,
prm_txb_xb97(i).xxe901,
prm_txb_xb97(i).xxe140,
prm_txb_xb97(i).xxe210,
prm_txb_xb97(i).xxb210,
prm_txb_xb97(i).xxb130,
prm_txb_xb97(i).xxb019,
prm_txb_xb97(i).xxb020,
prm_txb_xb97(i).xxb021,
prm_txb_xb97(i).xxb022,
prm_txb_xb97(i).xxb200,
prm_txb_xb97(i).xxe151,
prm_txb_xb97(i).xxe099);
/* v_row.xoe001 := prm_txb_xb97(i).xoe001;
v_row.xxe901 := prm_txb_xb97(i).xxe901;
v_row.xxe140 := prm_txb_xb97(i).xxe140;
v_row.xxe210 := prm_txb_xb97(i).xxe210;
v_row.xxb210 := prm_txb_xb97(i).xxb210;
v_row.xxb130 := prm_txb_xb97(i).xxb130;
v_row.xxb019 := prm_txb_xb97(i).xxb019;
v_row.xxb020 := prm_txb_xb97(i).xxb020;
v_row.xxb021 := prm_txb_xb97(i).xxb021;
v_row.xxb022 := prm_txb_xb97(i).xxb022;
v_row.xxb200 := prm_txb_xb97(i).xxb200;
v_row.xxe151 := prm_txb_xb97(i).xxe151;
v_row.xxe099 := prm_txb_xb97(i).xxe099;*/
t_xb97(i) := v_row;
END LOOP;

RETURN t_xb97;

END;

3.使用table()

-- 对table函数的使用

obj_xb97 := fun_a_returnxb97type(prm_txb_xb97);
SELECT 0 xoe001,
xxe901,
xxe140,
xxe210,
SUM(nvl(xxb210, 0)),
0,
xxb019,
xxb020,
xxb021,
xxb022,
xxb200,
xxe151,
xxe099 BULK COLLECT
INTO prm_txb_xb97
FROM TAbLE(obj_xb97)
HAVING SUM(nvl(xxb210, 0)) <> 0
GROUP BY xxe901,
xxe140,
xxe210,
xxb019,
xxb020,
xxb021,
xxb022,
xxb200,
xxe151,
xxe099;

分享到:
评论

相关推荐

    PL/SQL学习笔记

    PL/SQL有三种集合 联合数组 嵌套表 可变数组 联合数组详解: 什么是数组?数组有什么特点 数据是线性存放的,在内存中地址是连续的 可以用索引来访问 定义联合数组? 联合数组不需要定义长度,他能容纳的元素最大...

    PL/SQL 基础.doc

    PL/SQL 基础,一个不错的 PL/SQL 参考手册。内容预览: ---- 第一章 PL/SQL 简介 ---- 1. Oracle应用编辑方法概览 1) Pro*C/C++/... : C语言和数据库打交道的方法,比OCI更常用; 2) ODBC 3) OCI: C语言和...

    C# 访问Oracle示例+PL/SQL+存储过程+触发器 完整示例 测试可用 易懂

    PL/SQL中不能直接使用数据定义语言,而动态sql中允许 sql_str:='select id, name from producttype where id=:type_id'; execute immediate sql_str into trow using tid; --将查询的结果给trow,查询语句中用到的...

    Oracle P/L SQL实现文件压缩、解压功能

    Oracle P/L SQL实现文件压缩、解压功能,以下是此过程包的头部,包体经常打包处理plb,感兴趣用户可以下载下来。 Create or Replace Package UTL_ZIP AUTHID CURRENT_USER as Type File_List is Table of Clob; -...

    Oracle帮助文档

    pl/sql PL/SQL数据类型 PL/SQL控制结构 动态SQL PL/SQL异常处理 游标(cursor) 子程序/过程(procedure) 子程序/函数 事务处理 触发器 包 范式 数据备份(exp)与恢复(imp) 归档方式 过程练习题 考试题_...

    ORACLE SQL PLSQL

    1-1 pl/sql可以做的工作: 1. 用pl/sql的存储过程和数据库触发器实现至关重要的商业规则。 2. 在数据库中生成和完全地管理xml文档。 3. web页面与数据库的结合。 4. 实现自动化的数据库管理,用pl/sql建立安全级别来...

    字符串分割成数组函数(plsql function)

    将字符串分割成数组: 例如将字符串“7369,7499,7521,7844"分割成 7369 7499 ...select * from scott.emp where empno in (select column_value from table(my_split('7369,7499,7521,7844',',')));

    Oracle_PLSQL_语法详细手册

    oracle_PLSQL_语法详细手册 ...第二部分 PL/SQL语法部分 41 一、 PL/SQL语言简介 41 二、 变量说明 48 三、 PL/SQL控制程序流 52 四、 存储过程 54 五、 存储函数 54 六、 PACKAGE 54 七、 触发器 56 八、 应用实例 58

    OraclePLSQL编程经典例子

    通过在过程中使用输入参数,可以讲数据输入到执行部分,通过使用输出参数,可以将执行部分的数据输出到应用环境,在pl/sql中可以使用create procedure命令来创建过程。 编写一个存储过程,可以输入雇员名和新工资来...

    Oracle 中 table 函数的应用浅析

    利用游标 REF CURSOR 可将数据集(多行记录)传递到PL/SQL函数: SELECT * FROM TABLE (myfunction (CURSOR (SELECT * FROM mytab))); 2. 利用两个实体化视图(或表)作为样板数据 CREATE MATERIALIZED VIEW ...

    SQL21日自学通

    在子查询中使用汇总函数140 子查询的嵌套141 相关子查询144 EXISTS ANY ALL 的使用147 总结151 问与答151 校练场152 练习153 第一周回顾154 预览154 第二周概貌155 这一周都讲些什么155 第八天操作数据156 目标...

    Oracle8i_9i数据库基础

    §15.4 在 PL/SQL 中使用 sqlcode,sqlerrm 273 第十六章 存储过程和函数 276 §16.1 引言 276 §16.2 存储过程 276 §16.2.1 创建过程 276 §16.2.2 使用过程 278 §16.2.3 开发存储过程步骤 279 §16.2.3.1 编辑...

    H155-合集-大型数据库系统概论-实验.pptx

    编写一个PL/SQL程序块,使用游标对一个数据库表中的数据进行查询和更新。 H155-合集-大型数据库系统概论-实验全文共24页,当前为第6页。 大型数据库概论 Introduction of Large Database 实验3 Oracle9i的数据库...

    oracle实验报告

    在PL/SQL块中使用SELECT语句时注意几点: (1)SELECT语句必须含有INTO子句。 (2)INTO子句后的变量个数和位置及数据类型必须和SELECT命令后的字段名表相同。 (3)INTO子句后可以是简单类型变量或组合类型变量。 ...

    精通SQL--结构化查询语言详解

    10.1.2 在子查询中使用聚合函数 188 10.2 创建和使用返回多行的子查询 190 10.2.1 in子查询 190 10.2.2 in子查询实现集合交和集合差运算 191 10.2.3 exists子查询 192 10.2.4 exists子查询实现两表交集 194 ...

    oracle的sql优化

     *Sql语句中大量使用函数时候会导致很多索引无法使用上,要针对具体问题分析 4.其它  避免使用Select *,因为系统需要去帮你将*转换为所有的列名,这个需要额外去查询数据字典。  Count(1)和Count(*)差别不大。  ...

    table-api-generator:Oracle Table API生成器

    生成的API的工作是通过为表上的常规DML操作调用标准过程和函数来减少PL / SQL代码。 因此,生成的表API充当业务逻辑和数据之间的逻辑层。 顺便说一句,通过此逻辑层,您可以通过仅将表API的执行权限授予应用程序...

    Oracle中游标Cursor基本用法详解

     SELECT语句用于从数据库中查询数据,当在PL/SQL中使用SELECT语句时,要与INTO子句一起使用,查询的 返回值被赋予INTO子句中的变量,变量的声明是在DELCARE中。SELECT INTO语法如下:  SELECT [DISTICT|ALL]{*|...

    PL/SQLGenPkg-开源

    节省时间和金钱。 用 PL/SQL 编写的 Oracle Table API Generator 它为一个或多个表生成用于插入、删除、更新、选择和引用的数据库过程或函数。 可配置参数名称以及生成代码的内容/方式。

    Oracle中实现Split函数功能

    本文档详细介绍了如何在Oracle数据库中实现像C#等其它编程语言中Split函数来拆分字符的功能。例子简单易懂,并附有详细的实现过程。

Global site tag (gtag.js) - Google Analytics