oracle的存储过程 替换,为什么在存储过程中,变量替换无法使用索引?
CREATE OR REPLACE PROCEDURE ss(eff_day VARCHAR2)
-- eff_day 统计日期,格式为 'yyyymmdd'
AS
v_year INTEGER;
v_month INTEGER;
v_day INTEGER;
v_date DATE;
v_tmpDate DATE;
v_count INTEGER;
v_begin INTEGER;
v_eff_date VARCHAR2(12);
BEGIN
v_eff_date := TO_CHAR(TO_DATE(eff_day,'yyyymmdd')-1,'yyyymmdd');
v_year := TO_NUMBER(SUBSTR(v_eff_date,1,4));
v_month := TO_NUMBER(SUBSTR(v_eff_date,5,2));
v_day := TO_NUMBER(SUBSTR(v_eff_date,7,2));
v_date := to_date(v_eff_date,'yyyymmdd'); -- 时段的起始时间
v_begin := 0;
FOR v_count IN 1..24 -- 一天24时段,循环24次
LOOP
INSERT INTO a_contentbyper_7_1(icp_id,channel_id,content_id,area_code,year, month,day,time_id,itemclass,itemvalue)
(SELECT /*+ INDEX(A I_CREATED_T_EVENT_T) index(a I_CREATED_T_EVENT_T) index(a I_EVENT_ID) use_nl(a c)*/ a.icp_account_id,-1,b.id,1,1,1,1,
1 - 1,2,sum(c.amount) FROM mid.event_t a,content_t b,mid.event_resimpact_t c
WHERE a.itemname = b.name AND c.event_id = a.id AND c.dest_res_name = 'RMB Yuan'
AND a.created_t >= TO_DATE('20030716','YYYYMMDD') AND a.created_t < TO_DATE('20030716','YYYYMMDD') + 1/24
GROUP BY a.icp_account_id,b.id);
insert into log_date values (sysdate,v_count);
COMMIT;
INSERT INTO a_contentbyper_7_1(icp_id,channel_id,content_id,area_code,year, month,day,time_id,itemclass,itemvalue)
(SELECT /*+ INDEX(A I_CREATED_T_EVENT_T) index(a I_CREATED_T_EVENT_T) index(a I_EVENT_ID) use_nl(a c)*/ a.icp_account_id,-1,b.id,1,1,1,1,
1 - 1,2,sum(c.amount) FROM mid.event_t a,content_t b,mid.event_resimpact_t c
WHERE a.itemname = b.name AND c.event_id = a.id AND c.dest_res_name = 'RMB Yuan'
AND a.created_t >= v_date AND a.created_t < v_date + 1/24
GROUP BY a.icp_account_id,b.id);
insert into log_date values(sysdate,v_count);
COMMIT;
v_date := v_date + 1/24; -- 下一个时段的起始时间
END LOOP;
END;
/
上下两段代码,唯一的区别就是
a.created_t >= TO_DATE('20030716','YYYYMMDD') AND a.created_t < TO_DATE('20030716','YYYYMMDD') + 1/24
和
a.created_t >= v_date AND a.created_t < v_date + 1/24
但上面能使用索引,而下面的无法使用
v_date := to_date(v_eff_date,'yyyymmdd');
v_eff_date 是存储过程的输入参数
为什么 在存储过程中,变量替换无法使用索引?
谢谢!!
oracle的存储过程 替换,为什么在存储过程中,变量替换无法使用索引?相关推荐
- php 替换某一行,PHP中如何替换换行符?
原标题:PHP中如何替换换行符? 最近在进行时,需要进行文件内容比对,为了排除换行符对文件内容的影响,总结了一下PHP中替换换行符的几种方法: 第一种:使用str_replace 来替换换行 $str ...
- php 替换某个字符,php中如何替换字符串中的某个字符-PHP问题
正在PHP中,能够应用strtr()函数完成字符串交换. 起首咱们简略理解下strtr()函数的界说及语法. 语法: string strtr( string $str, string $from, ...
- 开发代码code中变量替换
除了automake/autoconfig 之外,还有其他的替换方式. 参看vdsm https://github.com/oVirt/vdsm/blob/master/Makefile.am htt ...
- python中变量替换_如何在python类中替换变量?
在类的方法内部,您可以通过在 self 上设置属性来操作属性,就像在 __init__ 方法中一样 . 您需要做的就是在阅读后设置这些属性 . 您可能希望 read() 方法也采用文件名: def r ...
- matlab 矩阵维度受限,matlab中变量问题——readonly 索引超出矩阵维度 workspacefunc 215...
matlab程序运行过程中会出现如上提示,在网上检索未果,键入dbstop if error语句也无法定错误之处,就想这个错误不是一般的错误. 通过间隔打断点的方式最后定位错误为一句exist = f ...
- 接收sqlplus的值_ORACLE中的替换变量或替代变量:-------Oracle中sqlPlus -oracle 输出变量...
Sqlplus是oracle提供的一个工具程序,既可以在oracle服务器使用,也可以在oracle客户端使用.在windows下分两种,sqlplus.exe是命令行程序,sqlplusw.exe是 ...
- java 不能执行mysql存储过程_java无法执行mysql中的函数及存储过程的.sql备份文件...
需求:用java程序执行[包含数据&结构&函数&存储过程]的.sql备份文件 问题记录: 1.在执行完insert类型的语句后,中文内容会显示乱码. 解决:将mysql参数中c ...
- Oracle如何使用PL/SQL调试存储过程
Oracle如何使用PL/SQL调试存储过程 PL/SQL中提供了[调试存储过程]的功能,可以完成存储过程的预编译与测试. 点击要调试的存储过程,右键选择TEST 如果需要查看变量,当然调试都需要.在 ...
- Oracle 存储过程,Hibernate 调用存储过程,JDBC调用存储过程,Oracle 动态SQL
Oracle 存储过程学习 目录 Oracle 存储过程........................................................................ ...
最新文章
- 金山android 杀毒软件,金山手机卫士
- 管理到底是“管人”还是“管事”,百分之九十的人理解有问题
- Spring Hibernate Mybatis配置详解
- 转javascript图片预加载技术
- 【EventBus】事件通信框架 ( 发送事件 | 根据事件类型获取订阅者 | 调用订阅方法 )
- 数据结构和算法:第七章 排序
- 【数理知识】《随机过程》方兆本老师-第6章-鞅过程及其性质
- 使用Qt创建XML文档及XML文档的增删改
- pacman 查询_linux pacman常用命令
- JAVA笔记11__File类/File类作业/字节输出流、输入流/字符输出流、输入流/文件复制/转换流...
- Java8新特性--CompletableFuture
- mongodb morphia
- 中台之上(一):重视业务架构,不要让“业务的归业务、技术的归技术”
- 【值得收藏】10个实现炫酷UI前端效果的CSS生成工具
- ps蒙版上渐变工具的使用及抠图方法
- 泛微OA-流程存储数据说明(表单主表+明细表)
- IE浏览器地址栏输入中文乱码问题
- 如果们正预测基本面子
- Word排版如何快速自动生成目录,简单实用,一看就懂!
- 给所有的Control加两个属性,实现回车键自动跳转到下一个控件