oracle - 如何为整个存储过程生成解释计划

标签 oracle stored-procedures sql-execution-plan

我通常在 sqlplus 中使用以下内容生成解释计划:

SET AUTOTRACE ON
SET TIMING ON
SET TRIMSPOOL ON
SET LINES 200
SPOOL filename.txt
SET AUTOTRACE TRACEONLY;

{query goes here}

SPOOL OFF
SET AUTOTRACE OFF

但是如果我想为存储过程生成解释计划怎么办?

有没有办法为整个存储过程生成解释计划? SP 没有输入/输出参数。

最佳答案

您生成的内容正确地称为“执行计划”。 “Explain plan”是一个用于生成和查看执行计划的命令,就像示例中的 AUTOTRACE TRACEONLY 所做的那样。

根据定义,执行计划是针对单个 SQL 语句的。 PL/SQL block 没有执行计划。如果它包含一个或多个 SQL 语句,那么每个语句都会有一个执行计划。

一种选择是手动从 PL/SQL 代码中提取 SQL 语句并使用您已经展示的过程。

另一个选项是激活 SQL 跟踪,然后运行该过程。这将在服务器上生成一个跟踪文件,其中包含 session 中执行的所有语句的执行计划。跟踪是相当原始的形式,因此通常最容易使用 Oracle 的 TKPROF 工具对其进行格式化;还有各种第三方工具也可以处理这些跟踪文件。

关于oracle - 如何为整个存储过程生成解释计划,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4510491/

相关文章:

oracle - 编译oracle表格

带有 OraOLE DB 提供程序的 Oracle 即时客户端?

sql-server-2005 - 如何遍历存储过程中的记录集?

php - Mysql 存储过程

sql - "Clustered Index Scan (Clustered)"在 SQL Server 执行计划中意味着什么?

sql-server - 为什么 SQL Server 在 "select *"操作中使用非聚集索引而不是聚集 PK?

sql-server - 使用规范化表真的更好吗?

oracle - 在 apex 中定义唯一键列

mysql - 在 MySQL 中对空间表执行子查询

sql - 具有复合主键的表的基数不好