我有一个包在下面
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,提交或回滚
如何进行?
答案 0 :(得分:2)
调用DBMS_STATS
部分函数,或者只是稍后想要做的事情?当前的包体不应该编译(你可能想修复它并编辑)。
如果stats是f1的一部分,请问自己为什么要从select中调用的函数中收集统计信息?它不是主流,可能不是正确的做法。说过我认为(未经测试)AUTONOMOUS_TRANSACTION
应该做的工作:
create or replace package body p1 is
function f1 return number is
pragma autonomous_transaction;
begin
dbms_stats.gather_table_stats('WMXT','EMP',estimate_percent=>10);
return 1;
end;
end;
另一方面,如果您想单独收集统计信息(根本不是f1或p1的一部分),请完全删除该部分并在编译p1后运行它。