Oracle 存储过程游标查询优化,插入临时表

wzmltt 2018-06-12 09:28:36
CREATE OR REPLACE PROCEDURE SEL_plan (
I_JIXING IN EFF_PROCESSPLAN.JIXING%type , --机型输入参数

cur out sys_refcursor
)
AS
/********************************
ACTION : 单机数量查询存储过程
AUTHORR: wzm
DATE : 2018-05-30

*********************************/



--初始化
TYPE R_TYPE IS RECORD(
V_EFF EFF_PROCESSPLAN.EFF%TYPE,
V_PPNUMBER EFF_PROCESSPLAN.PPNUMBER%TYPE);

v_sql varchar2(11000);--动态sql

v_sql1 varchar2(10000);

v_processPlanTableName clob DEFAULT '';-- 动态表名 根据机型自动生成
V_R1 R_TYPE;
--定义游标 (取出有效性EFF,动态表名后缀PPNUMBER)
CURSOR MYCURSOR IS
SELECT E.EFF,
E.PPNUMBER
FROM EFF_PROCESSPLAN E
WHERE E.JIXING =I_JIXING ;


BEGIN


--打开游标
OPEN MYCURSOR;
LOOP
FETCH MYCURSOR
INTO V_R1;
EXIT WHEN MYCURSOR%NOTFOUND;
--拼接动态表名
v_processPlanTableName:= concat('zzz_processplan_',V_R1.V_PPNUMBER);

--动态sql



v_sql:='select ppnumber ,sum(wholenumber) as wholenumber, gongyiluxian ,'''|| V_R1.V_EFF ||
''' as eff , ppname from ' || v_processPlanTableName|| ' group by ppnumber, gongyiluxian , ppname ' ;





v_sql1:='insert into tmp2 '|| v_sql;

---优化查询,批量插入临时表,数据量很大

DBMS_OUTPUT.PUT_LINE(v_sql1);

execute immediate v_sql1;
commit;

DBMS_OUTPUT.PUT_LINE(v_sql);
DBMS_OUTPUT.PUT_LINE(v_processPlanTableName);
DBMS_OUTPUT.PUT_LINE(V_R1.V_EFF);


END LOOP;



open cur for ' select ppnumber , wholenumber , gongyiluxian , wm_concat( distinct eff) as eff , ppname
from tmp2 group by ppnumber ,wholenumber , gongyiluxian , ppname ';

CLOSE MYCURSOR;

EXCEPTION
WHEN OTHERS THEN
ROLLBACK;

end SEL_plan;
...全文
1086 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
wzmltt 2018-06-12
  • 打赏
  • 举报
回复
v_sql:='select ppnumber ,sum(wholenumber) as wholenumber, gongyiluxian ,'''|| V_R1.V_EFF || ''' as eff , ppname from ' || v_processPlanTableName|| ' group by ppnumber, gongyiluxian , ppname ' ; 动态表中查询 大量数据,表名取自游标中数据。
嗯 是光盘里面的内容,书太厚咧没法影印啊 《Oracle11g宝典》共分19章,第1~4章分别介绍了Oracle11g的下载和安装、SQL*Plus的使用、SQ语言与PL/SQL.程序设计,第5~9章分别介绍了Oracle11g的体系结构、表空间与数据文件的管理、启动和关闭数据库、网络服务与管理,第10—13章介绍了有关安全的几个内容(权限、角色、概要文件、用户的管理),第14—17章介绍了几种方案对象(表、索引、视图、同义词和序列)的管理,第18~19章分别介绍了SOLDeveloper的使用、数据库的备份与恢复技术。   《Oracle11g宝典》以Oracle提供的示例数据库为背景,从基本原理、理论提高、实际操作、经验策略、应用开发等方面,结合命令行方式、开发工具的使用、管理工具的使用、Oracle与Windows之间的关系等知识点,按照学习、理解、应用、管理的需要全面描述了Oracle11g的特征和功能,并在Oracle11g的环境中,对书中的全部例子进行了运行(其中大部分例子都以具体操作界面的形式添加到书中),以给读者构造一个真实、有序、合理、坚实、正确和专业的Oracle知识结构。   《Oracle11g宝典》是Oracle数据库管理员、安全管理员、网络管理员、应用开发人员的参考指南,还是Oracle技术支持和培训机构、Oracle学习班、高等院校计算机专业数据库课程的参考教材和上机指导教材。每类人员都可以从中找到适合自己工作需要的内容。 目录   第1章 OracIe11g的安装与卸载   1.1 下载并展开Oracle11g数据库软件   1.2 安装前的准备工作   1.2.1 检查硬件、软件要求   1.2.2 设置IP地址   1.2.3 设置计算机全名   1.2.4 关闭Windows防火墙和某些杀毒软件   1.3 安装Oracle11g数据库(高级安装)   1.4 查看、验证安装结果   1.4.1程序组   1.4.2 文件体系结构   1.4.3 服务、进程   1.4.4 注册项   1.4.5 环境变量   1.4.6 运行管理工具程序   1.5 卸载Oracle11g   1.5.1 停止所有的Oracle服务   1.5.2 用OracleUniversalInstaller卸载所有的Oracle组件   1.5.3 手动删除Oracle遗留的成分   1.6 小结   第2章使用SQL*Plus工具   2.1 启动、退出SQL*Plus   2.1.1启动、退出SQL*Plus   2.1.2 设置操作界面风格   2.1.3 获取SQL*Plus命令的帮助   2.2 编辑、运行语句和命令   2.3 DESCRIBE命令   2.4 脚本文件及其文件操作命令   2.4.1 文件操作命令举例   2.4.2 两种运行脚本文件的命令举例   2.5 连接、断开与数据库的连接   2.5.1CONN〔ECT〕命令   2.5.2DISC〔ONNECT〕命令   2.6 交互式命令   2.6.1替换变量   2.6.2 与用户通信   2.6.3 绑定变量   2.7自定义SQL*Plus环境   2.7.1 使用SHOW命令   2.7.2 使用SET命令   2.7.3 保存与定制SQL*Plus环境   2.8 格式化查询结果   2.8.1 格式化列   2.8.2 限制重复行   2.8.3 使用汇总行   2.8.4 设置页与报告的标题和脚注   2.9 用脚本文件生成报表   2.10 自动生成SQL语句   2.11 小结   第3章 SQL语言基础   3.1Oracle提供的示例数据库   3.1.1 示例数据库概述   3.1.2 HR示例方案简介   3.1.3 HR示例方案中的表结构   3.2 查询数据   3.2.1 基本查询   3.2.2 分组查询   3.2.3 连接查询   3.2.4 使用SQL92语法的连接查询   3.2.5 集合查询   3.2.6 子查询   3.2.7 在DDL,DML语句中使用子查询   3.3 维护数据   3.3.1插入数据   3.3.2 更新数据   3.3.3 删除数据   3.4 事务与事务控制   3.4.1 事务的概念   3.4.2 事务控制的基本语句及其功能   3.4.3 事务的状态与性质   3.5 SQL语言中的各种函数   3.5.1 单行数字函数   3.5.2 单行字符函数   3.5.3 单行日期时间函数   3.5.4 单行转换函数   3.5.5 几个函数的使用举例   3.6 小结   第4章 PUSQL语言基础   4.1 PL/SQL语言简介   4.1.1 概

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧