将 SQL 传递给 Oracle 绑定变量
我需要执行类似的操作:
select
[very big SQL]
where phone_number in(:SQL2)
是否可以使用 SQL2 的绑定变量?
我想保存主要SQL的执行计划。
谢谢。
I need to execute something like:
select
[very big SQL]
where phone_number in(:SQL2)
Is it possible to use bind variable for SQL2?
I want to save the execution plan of the major SQL.
Thanks.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
创建一个临时表并在执行
SQL1
之前将SQL2
的结果保存在其中:Create a temporary table and save
SQL2
's results there prior to executingSQL1
:如果这个查询被执行很多次,我不会使用临时表。
Tom Kyte 在他的博客上描述了一个绑定内列表的“技巧”:
http://tkyte.blogspot.com/2006/06/varying-in-lists.html
我敢打赌这会更有效率。使用 SQL Trace 应该很容易证明。
If this query gets executed a lot of times, I wouldn't use a temporary table for it.
There is a 'trick' to bind an inlist, which Tom Kyte describes on his blog:
http://tkyte.blogspot.com/2006/06/varying-in-lists.html
I would bet on that being much more efficient. It should be easy to prove with a SQL Trace.
进一步阐述夸萨诺伊的观点。听起来您可能对临时表不熟悉。 这是一个很好的介绍。
您只需创建该表一次。然后在给定的会话中,您首先:
不存在与另一个会话的数据冲突/重叠的风险。
Further to Quassanoi's point. It sounds like you may not be familiar with temporary tables. This is a good introduction.
You only create the table once. Then within a given session you first:
There's no risk of conflicting/overlapping with another session's data.