【发布时间】:2018-04-22 06:06:07
【问题描述】:
我有一个包裹在下面
CREATE PACKAGE p1
IS
FUNCTION f1
RETURN NUMBER;
END;
CREATE OR REPLACE PACKAGE BODY p1
IS
FUNCTION f1
RETURN NUMBER
IS
BEGIN
RETURN 1;
END;
BEGIN
DBMS_STATS.gather_table_stats ('WMXT', 'EMP', estimate_percent => 10);
END;
当我尝试如下调用函数 f1 时
SELECT p1.f1 FROM DUAL;
我遇到了错误,
ORA-14552:无法在查询或 DML 中执行 DDL、提交或回滚
如何进行?
【问题讨论】:
-
错误信息很清楚。从函数中删除统计信息收集步骤。
-
调用dbms_stats的目的是在调用函数f1之前分析表。请让我知道如何实现这一目标。
-
将统计信息收集步骤移至单独的过程并显式调用该过程,而不是在包初始化中。或者,使用没有查询的函数,例如
declare i int := p1.f1; begin null; end;
标签: oracle