gpt4 book ai didi

c# - 在 C# 中执行 Oracle 解释计划

转载 作者:行者123 更新时间:2023-11-30 18:18:54 25 4
gpt4 key购买 nike

通常,对sql 语句执行“解释计划”会导致将记录插入到plan_table 中。当通过 TOAD 执行时,这对我来说很好用。我的要求是通过我的 c# 应用程序 (Oracle.DataAccess.Client lib) 执行此操作。不幸的是,在 C# 中执行时,在 TOAD 上运行的相同语句不会导致任何记录插入到 plan_table 中。

奇怪的是,我确信在 C# 中执行时 plan_id 序列被消耗,尽管没有记录插入表中。我可以通过在 TOAD 中执行新的解释计划来确认这一点,并注意到 plan_id 序列已根据我通过 C# 进行的尝试次数跳过。 Notice how it went from 44 to 50.

我需要特别解释计划的原因是我想在执行之前获取给定查询中涉及的表和列的列表。我考虑过语法解析,但鉴于 plan_table 记录恰好包含我想要的数据,感觉就像重新发明轮子。

出于所有意图和目的,同一用户登录了 TOAD 和 C#,因此我不怀疑权限有限。我尝试了有和没有 promise 。我还尝试将解释计划放入存储过程并在 C# 中调用它,结果相同。 (在 TOAD 上按预期工作,但在 C# 上没有插入记录)。为了让它在存储过程中工作,我必须让它立即执行。

myoracon.Open();
OracleCommand myoracom = myoracon.CreateCommand();
myoracom = new OracleCommand("explain plan set statement_id = 'xd' for select * from employee", myoracon);
OracleTransaction trx;
trx = myoracom.Connection.BeginTransaction();
myoracom.Transaction = trx;
myoracom.ExecuteNonQuery();
trx.Commit();
myoracon.Close();

所以,在所有这一切之后,我的问题如下:为什么在 C# 中解释计划不会导致将记录插入到 plan_table 中,我该怎么做才能让它工作?

提前致谢!

最佳答案

您是否控制了表:TOAD_PLAN_TABLE 您在哪个用户中运行了 C#

如果它不存在,请在您的 c# 用户下手动创建它:

CREATE TABLE **your_user**.TOAD_PLAN_TABLE
(
STATEMENT_ID VARCHAR2(30 BYTE),
PLAN_ID NUMBER,
TIMESTAMP DATE,
REMARKS VARCHAR2(4000 BYTE),
OPERATION VARCHAR2(30 BYTE),
OPTIONS VARCHAR2(255 BYTE),
OBJECT_NODE VARCHAR2(128 BYTE),
OBJECT_OWNER VARCHAR2(30 BYTE),
OBJECT_NAME VARCHAR2(30 BYTE),
OBJECT_ALIAS VARCHAR2(65 BYTE),
OBJECT_INSTANCE INTEGER,
OBJECT_TYPE VARCHAR2(30 BYTE),
OPTIMIZER VARCHAR2(255 BYTE),
SEARCH_COLUMNS NUMBER,
ID INTEGER,
PARENT_ID INTEGER,
DEPTH INTEGER,
POSITION INTEGER,
COST INTEGER,
CARDINALITY INTEGER,
BYTES INTEGER,
OTHER_TAG VARCHAR2(255 BYTE),
PARTITION_START VARCHAR2(255 BYTE),
PARTITION_STOP VARCHAR2(255 BYTE),
PARTITION_ID INTEGER,
OTHER LONG,
DISTRIBUTION VARCHAR2(30 BYTE),
CPU_COST INTEGER,
IO_COST INTEGER,
TEMP_SPACE INTEGER,
ACCESS_PREDICATES VARCHAR2(4000 BYTE),
FILTER_PREDICATES VARCHAR2(4000 BYTE),
PROJECTION VARCHAR2(4000 BYTE),
TIME INTEGER,
QBLOCK_NAME VARCHAR2(30 BYTE),
OTHER_XML CLOB
)

关于c# - 在 C# 中执行 Oracle 解释计划,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40299443/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com