12
返回列表 发新帖
楼主: wwwyibin518

[PL/SQL] 动态SQL内 表的分区名不确定 使用绑定变量的疑问?

[复制链接]
论坛徽章:
2
弗兰奇
日期:2017-06-25 12:14:04山治
日期:2018-01-25 10:46:01
11#
 楼主| 发表于 2017-2-10 10:40 | 只看该作者
wmxcn2000 发表于 2017-2-10 10:26
执行计划是基于表的;

如果表都变了,执行计划就能复用了。

表确定了. 但表的分区不确定呢?
例如我在8楼的例子情况..
动态SQL内, 分区名使用字符串拼接, 其他地方绑定变量, 重复执行,会重用执行计划吗.

使用道具 举报

回复
论坛徽章:
223
2010新春纪念徽章
日期:2010-03-01 11:20:51ITPUB元老
日期:2019-04-25 13:46:07至尊黑钻
日期:2015-08-13 13:38:12至尊黑钻
日期:2015-02-15 09:47:472015年中国系统架构师大会纪念徽章
日期:2015-07-31 17:48:20管理团队2007贡献徽章
日期:2015-01-19 09:48:272015中国数据库技术大会纪念徽章
日期:2015-05-15 14:08:23海蓝宝石
日期:2015-02-03 10:23:39红宝石
日期:2015-02-03 10:26:04会员2007贡献徽章
日期:2015-02-03 10:26:41
12#
发表于 2017-2-10 13:51 | 只看该作者
8# ,选方法 2 ;

不仅仅是执行计划的好处,还可以规避 SQL 注入;

使用道具 举报

回复
论坛徽章:
520
奥运会纪念徽章:垒球
日期:2008-09-15 01:28:12生肖徽章2007版:鸡
日期:2008-11-17 23:40:58生肖徽章2007版:马
日期:2008-11-18 05:09:48数据库板块每日发贴之星
日期:2008-11-29 01:01:02数据库板块每日发贴之星
日期:2008-12-05 01:01:03生肖徽章2007版:虎
日期:2008-12-10 07:47:462009新春纪念徽章
日期:2009-01-04 14:52:28数据库板块每日发贴之星
日期:2009-02-08 01:01:03生肖徽章2007版:蛇
日期:2009-03-09 22:18:532009日食纪念
日期:2009-07-22 09:30:00
13#
发表于 2017-2-10 22:27 | 只看该作者
wwwyibin518 发表于 2017-2-10 09:55
1)
FOR I IN (SELECT CITY_ID FROM TAB_PROVINCE) LOOP
  V_SQL_STMT := 'INSERT INTO TAB_TMP AS SEL ...

你在循环里拼凑V_SQL_STMT。这个字符串如果是第一次出现,那就有硬解析,否则就没有,即使USING后面的值不一样。
明白了这个道理,你就能回答自己的问题。
明白之后,你都不一定要在循环里拼凑V_SQL_STMT,既然它不会改变何必多此一举?

使用道具 举报

回复
论坛徽章:
484
ITPUB北京香山2007年会纪念徽章
日期:2007-01-24 14:35:02ITPUB北京九华山庄2008年会纪念徽章
日期:2008-01-21 16:50:24ITPUB北京2009年会纪念徽章
日期:2009-02-09 11:42:452010新春纪念徽章
日期:2010-03-01 11:04:552010数据库技术大会纪念徽章
日期:2010-05-13 10:04:272010系统架构师大会纪念
日期:2010-09-04 13:35:54ITPUB9周年纪念徽章
日期:2010-10-08 09:28:512011新春纪念徽章
日期:2011-02-18 11:43:32ITPUB十周年纪念徽章
日期:2011-11-01 16:19:412012新春纪念徽章
日期:2012-01-04 11:49:54
14#
发表于 2017-2-14 09:42 | 只看该作者
wwwyibin518 发表于 2017-2-10 10:05
好的.收到。只是还不是很清晰理解为什么不能.

SQL执行时,先解析,然后再绑定绑定变量,最后才是运行
所以表名不能是绑定变量

再者,如果是绑定变量,那么表名必然是一个字符串变量,那 select * from 'TableA' 是个什么鬼?这样一想就明白了

使用道具 举报

回复
论坛徽章:
484
ITPUB北京香山2007年会纪念徽章
日期:2007-01-24 14:35:02ITPUB北京九华山庄2008年会纪念徽章
日期:2008-01-21 16:50:24ITPUB北京2009年会纪念徽章
日期:2009-02-09 11:42:452010新春纪念徽章
日期:2010-03-01 11:04:552010数据库技术大会纪念徽章
日期:2010-05-13 10:04:272010系统架构师大会纪念
日期:2010-09-04 13:35:54ITPUB9周年纪念徽章
日期:2010-10-08 09:28:512011新春纪念徽章
日期:2011-02-18 11:43:32ITPUB十周年纪念徽章
日期:2011-11-01 16:19:412012新春纪念徽章
日期:2012-01-04 11:49:54
15#
发表于 2017-2-14 09:42 | 只看该作者
本帖最后由 lastwinner 于 2017-2-14 09:43 编辑
wwwyibin518 发表于 2017-2-10 10:05
好的.收到。只是还不是很清晰理解为什么不能.

另外,为什么通过其他语言就可以让表名是动态的,在PL/SQL里就不行?参照我上帖回复,仔细想一下,也会明白的

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表