将 SQL 传递给 Oracle 绑定变量

发布于 2024-08-19 16:38:19 字数 160 浏览 3 评论 0原文

我需要执行类似的操作:

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

柠檬 2024-08-26 16:38:19

创建一个临时表并在执行 SQL1 之前将 SQL2 的结果保存在其中:

CREATE GLOBAL TEMPORARY TABLE mytemptable (id INT NOT NULL)

CREATE OUTLINE ol_sql1
ON
SELECT  *
FROM    sql1
WHERE   id IN
        (
        SELECT  id
        FROM    mytemptable
        )

INSERT
INTO    mytemptable
SELECT  *
FROM    sql2

SELECT  *
FROM    sql1
WHERE   id IN
        (
        SELECT  id
        FROM    mytemptable
        )

Create a temporary table and save SQL2's results there prior to executing SQL1:

CREATE GLOBAL TEMPORARY TABLE mytemptable (id INT NOT NULL)

CREATE OUTLINE ol_sql1
ON
SELECT  *
FROM    sql1
WHERE   id IN
        (
        SELECT  id
        FROM    mytemptable
        )

INSERT
INTO    mytemptable
SELECT  *
FROM    sql2

SELECT  *
FROM    sql1
WHERE   id IN
        (
        SELECT  id
        FROM    mytemptable
        )
丘比特射中我 2024-08-26 16:38:19

如果这个查询被执行很多次,我不会使用临时表。

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.

可爱咩 2024-08-26 16:38:19

进一步阐述夸萨诺伊的观点。听起来您可能对临时表不熟悉。 这是一个很好的介绍。

您只需创建该表一次。然后在给定的会话中,您首先:

  1. 填充临时表
  2. 执行从临时表回滚中提取的查询

不存在与另一个会话的数据冲突/重叠的风险。

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:

  1. populate the temporary table
  2. execute your query pulling from the temporary table
  3. rollback.

There's no risk of conflicting/overlapping with another session's data.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文