暂无图片
EXECUTE IMMEDIATE作用
我来答
分享
Zoe
2024-12-04
EXECUTE IMMEDIATE作用

存储过程循环,循环内部有句sql,明明可以使用简单的select into 语句,没搞明白前人怎么会使用EXECUTE IMMEDIATE写法,跑2h不完。我改写成select into语句之后2分钟之内就跑完了。疑惑前人为什么这么写以及为什么使用EXECUTE IMMEDIATE写法时间就很长。

我来答
添加附件
收藏
分享
问题补充
4条回答
默认
最新
漫步者

动态SQL和静态SQL的差别是有的,但是按照你说的时间从2H到几分钟,这应该是不太可能的,差距没有这么的明显;你需要考虑其它因素的影响

暂无图片 评论
暂无图片 有用 0
打赏 0
暂无图片
Zoe

静态SQL的执行计划会被缓存,动态SQL每次执行时都需要重新解析。尤其在频繁执行的情况下,动态SQL性能远远慢于静态SQL。

暂无图片 评论
暂无图片 有用 1
打赏 0
Thomas

前人是照着他的前人应付任务,依葫芦画瓢,不求甚解的;而作者你是认真琢磨功能,想把代码写好的。这就是你和前人的不同之处。

暂无图片 评论
暂无图片 有用 0
打赏 0
广州_老虎刘

根据你的描述, 基本能够得出的结论就是, 你的execute immediate 没有使用using , 使用的是下面的写法, 每次执行都需要硬解析, 如果循环次数多, 时间长很多是正常的:

execute immediate 'select /*+ tag1 */count(*) from t1 where object_id='||i into v_cnt;



如果你使用的是带using(绑定变量写法)的execute immediate, 在执行时间上只会比select into的写法慢一点点,比如:

execute immediate 'select /*+ tag3 */count(*) from t1 where object_id=:xxx' into v_cnt using i;  这个是使用execute immediate的标准写法.


对应的select into 写法:

 select /*+ tag2 */count(*) into v_cnt from t1 where object_id=i;


暂无图片 评论
暂无图片 有用 2
打赏 0
Zoe
题主
2024-12-10
谢谢老师的详细讲解,确实是老师说的这种情况。
回答交流
Markdown


请输入正文
提交
相关推荐
Oracle报错显示无法从套接字读取更多数据,怎么解决?
回答 1
请描述清楚问题,这是在执行什么操作的时候报错的?
Oracle 的定时备份,热备好还是冷备好?
回答 2
已采纳
这个看你的库大小有需求:1、库比较大上TB了,就需要制定备份策略rman热备份或增量备份了。2、库才几GB,用户单一就可以通过expdb数据泵导出冷备了。没有哪个最好,适合自己的才是最好的。希望对你有
Oracle12.1.0.2,数据库经常夜里4点多就宕机了
回答 7
alert日志里面很明显是job的问题Errorsinfile/u01/Oracle12c/diag/rdbms/orcl/orcl/trace/orclj00010109.trc:ORA12012:
ogg logmnr_restart_ckpt$ 表很大,可以直接删除吗?
回答 1
搬运Mos文档,希望对你有帮助:HowtoreducetheHighwaterofLOGMNRRESTARTCKPT$(DocID429599.1)ToBottomToBottomInthisDocu
双节点12C RAC 环境,第二个实例状态为: Shutdown Initiated该如何解决
回答 2
给出的信息,太少不好判断,查看下日志报错情况
oracle数据库的dump文件有什么好方法导入到mysql库么
回答 3
条件允许建议使用第三方工具进行数据库转换操作
12C rac 节点2 报错ORA-00600: internal error code, arguments: [kjctr_pbmsg:badbmsg2] 并重启
回答 3
看下两个节点的netstats结果,另外操作系统是否有错误日志?
Oracle.Data.Guard.11g完全参考手册 谁有这本书电子版的,分享一下,谢谢
回答 1
已采纳
安排!链接:https://pan.baidu.com/s/1Z9NS516sIPaDSPVaWC0leQ提取码:dmaq
Rac RMAN备份报ORA-00028: YOUR SESSION HAS BEEN KILLED
回答 4
RELATEDISSUES(bugs,forums,RFAs)16587828这个在MOS上能搜索到什么吗?
oralce安装
回答 10
在root用户下exportDISPLAYip:0.0xhost如果报权限不允许就换一下exportDISPLAYip:1.0xhost如果没有报错就继续切换到oracle用户exportDISPLA