如何从PHP获取Oracle SQL查询的EXPLAIN PLAN?

我在Windows XP上使用Oracle 10g Express,在运行PHP 5.3的Macbook OS X 10.5.8上使用。 1使用PDO和Oracle Instant Client 10.2.0.4.0_4,我运行以下脚本:</ p>

 &lt;?php 
$ pdo = new PDO(“oci:dbname = winders:1521 / xe“,”system“,”XXXXXX“);
...

$ sql =”WITH NumberedBugs AS(
SELECT b。*,ROW_NUMBER()OVER(ORDER BY bug_id)AS RN
FROM Bugs b
)SELECT * FROM NumberedBugs WHERE RN =:offset“;

$ stmt = $ pdo-&gt; prepare($ sql);
$ stmt-&gt; execute($ offset) ;
$ row = $ stmt-&gt; fetch(PDO :: FETCH_ASSOC);
</ code> </ pre>

没问题。 但我也希望能够编写一个PHP脚本来获取此查询的 EXPLAIN PLAN </ code>报告。 当我尝试这个时,我收到一个错误:</ p>

  $ sql =“使用NumberedBugs AS的解析计划(
SELECT b。*,ROW_NUMBER()OVER(ORDER BY bug_id )AS RN
FROM Bugs b
)SELECT * FROM NumberedBugs WHERE RN = 1234“;
$ stmt = $ pdo-&gt; prepare($ sql);
$ stmt-&gt; execute();
$ row = $ stmt-&gt; fetch(PDO :: FETCH_ASSOC);
</ code> </ pre>

(我将查询参数更改为此测试的硬编码整数文字。 )</ p>

当我尝试调用 fetch()</ code>时出现此错误:</ p>


ORA- 24374:在获取或执行之前定义未完成并获取</ p>
</ blockquote>

对此有何解释,以及如何获取 EXPLAIN PLAN </ code>报告 从PHP脚本? 我已经对此错误进行了一些网络搜索,但我找不到足够明确的解释。</ p>
</ div>

展开原文

原文

I'm using Oracle 10g Express on Windows XP, and on a Macbook OS X 10.5.8 running PHP 5.3.1 with PDO and Oracle Instant Client 10.2.0.4.0_4, I run the following script:

<?php
$pdo = new PDO("oci:dbname=winders:1521/xe", "system", "XXXXXX");
...

$sql = "WITH NumberedBugs AS (
    SELECT b.*, ROW_NUMBER() OVER (ORDER BY bug_id) AS RN 
    FROM Bugs b
) SELECT * FROM NumberedBugs WHERE RN = :offset";

$stmt = $pdo->prepare($sql);
$stmt->execute($offset);
$row = $stmt->fetch(PDO::FETCH_ASSOC);

No problem. But I also want to be able to write a PHP script that gets the EXPLAIN PLAN report for this query. When I try this, I get an error:

$sql = "EXPLAIN PLAN FOR WITH NumberedBugs AS (
    SELECT b.*, ROW_NUMBER() OVER (ORDER BY bug_id) AS RN 
    FROM Bugs b
) SELECT * FROM NumberedBugs WHERE RN = 1234";
$stmt = $pdo->prepare($sql);
$stmt->execute();
$row = $stmt->fetch(PDO::FETCH_ASSOC);

(I changed the query parameter to a hard-coded integer literal for this test.)

I get this error when I try to call fetch():

ORA-24374: define not done before fetch or execute and fetch

What's the explanation of this, and how can I get the EXPLAIN PLAN report from a PHP script? I've done some web searches for this error, but I couldn't find a clear enough explanation.

1个回答



EXPLAIN PLAN FOR </ code>仅将执行计划写入表格(默认 plan_table </ code> )。</ p>

要实际阅读解释计划,您可以从该表中进行简单选择,或者执行</ p>

  SELECT * FROM TABLE(dbms_xplan.display); 
</ code> </ pre>

在第一次获取格式化输出后的查询。</ p>

请参阅使用EXPLAIN PLAN 获取更多信息。</ p>
</ div>

展开原文

原文

EXPLAIN PLAN FOR only writes the execution plan into a table (default plan_table).

To actually read the explain plan you could do a plain select from this table, or do a

SELECT * FROM TABLE(dbms_xplan.display);

after your first query to get a formatted output.

See Using EXPLAIN PLAN for more information.

duan02468
duan02468 是,对的。 plan_table包含EXPLAIN PLAN提供的所有信息。 dbms_xplan.display使用您解释的上一个查询的数据,并以更易于阅读的格式显示它。
10 年多之前 回复
douxian5076
douxian5076 啊哈,我试过了。 我似乎需要准备并执行第一个查询,但我不会获取任何结果。 然后针对plan_table或TABLE(dbms_xplan.display)运行新查询。 他们以不同的格式给出结果。
10 年多之前 回复
dream518518518
dream518518518 你的意思是我会执行()第一个查询但没有获取结果,然后对plan_table运行一个新的查询? 或者我只需要准备()第一个查询但不执行它?
10 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐