【发布时间】:2020-05-17 06:37:15
【问题描述】:
我有一个类似的查询
(SELECT ...
FROM T2
WHERE x=1)
select 返回一个插入到 T1 中的元组列表。 这么久,真好。
因为“1”可能会更改带有参数的存储过程。
BEGIN
INSERT INTO T1
(SELECT ...
FROM T2
WHERE x=value)
END;
该过程由 T3 上的 AFTER INSERT 触发器调用。
在 Oracle 12c 插入上运行选择,例如两行进入 T1。使用不同的值而不是“1”运行也可以正常工作。
在调用过程时,尽管使用不同的参数调用,但总是插入相同数量的具有相同值的行。看起来它是使用相同的参数执行的,但事实并非如此。 该过程的执行时间大约是直接查询插入语句的18倍。
上面的代码可能无法编译,只是为了演示。
知道为什么程序执行需要这么长时间以及为什么它显然在做某事。还有吗?
【问题讨论】:
-
这不是一个最小的可重现示例。请参阅:stackoverflow.com/help/minimal-reproducible-example。我们无法猜测您的实际代码是什么。不,不要发布您当前的全部代码。创建一些一次性表(在此处包括创建表语句),在这些表上创建触发器(在此处包括触发器代码),创建显示您的问题的小过程(在此处包括过程代码)。然后编写一个调用您的过程的脚本(将其包含在您的问题中)并解释您期望的结果。
-
另外,你的措辞应该准确。你写的大部分句子都是无意义的。 Select 语句不返回“元组列表”。 '1' 可能会改变存储过程——什么?不,运行选择不会插入任何内容。没有查询插入语句这样的事情。
标签: oracle stored-procedures plsql oracle12c