gpt4 book ai didi

Oracle:从 "select from dual"调用函数不执行任何操作

转载 作者:行者123 更新时间:2023-12-02 00:56:40 25 4
gpt4 key购买 nike

我有一个插入和更新表的函数。调用它的来源:

select AGENTS_REGISTRATION() from dual;

或者:

declare
x NUMBER;
begin
select AGENTS_REGISTRATION() into x from dual;
end;
/

什么也不做。另一种形式进行了必要的更改:

declare
x NUMBER;
begin
x := AGENTS_REGISTRATION();
end;
/

前两个表达式有什么问题?

最佳答案

Oracle 不允许在查询中执行DML 操作。调用在查询中插入/更新/删除数据的函数将引发:

ORA-14551: cannot perform a DML operation inside a query

如果异常被困在函数内,查询不会引发错误 - 使用WHEN OTHERS异常处理程序(或捕获ORA-14551 直接使用 pragma exception_init),而不会重新引发错误,正如您在本例中看到的那样。

虽然我不建议这样做,但如果函数定义为自主事务,则可以在查询中使用DML操作(通过使用pragmaautonomous_transaction) - 但这会导致更多问题。

解决方案是不要在查询中调用函数 - 这样做当然没有意义。

关于Oracle:从 "select from dual"调用函数不执行任何操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46567956/

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