【问题标题】:ORA-04068 with Only Constant in Spec (DB 11.2.0.4)ORA-04068,规范中只有常数 (DB 11.2.0.4)
【发布时间】:2017-06-18 06:12:56
【问题描述】:

我有一个这样的包裹:

create or replace PACKAGE pkg_state
AS
   gv_test constant varchar(50) := 'Test!';

   FUNCTION get_variable
   RETURN VARCHAR2;
END pkg_state;
/

create or replace PACKAGE BODY pkg_state
AS

   FUNCTION get_variable
   RETURN VARCHAR2
   AS
   BEGIN
      RETURN 'TRUE';
   END get_variable;

END pkg_state;
/

我的理解是,11.2.0.2 常量不会改变包状态。 但是当我在另一个会话中更改包体时,我会得到 04068 错误。如果常量在包主体中,则一切都按预期工作,但与规范中的常量不符。

(Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production)

有什么想法吗?我错过了什么?

【问题讨论】:

    标签: database oracle plsql oracle11g constants


    【解决方案1】:

    我不知道他们是否在 11g 数据库中解决了这个问题。 为了避免这种使用(我知道它没有抓住重点):

    create or replace PACKAGE pkg_state
    AS
       FUNCTION gv_test RETURN VARCHAR2;
    
       FUNCTION get_variable
       RETURN VARCHAR2;
    END pkg_state;
    /
    
    create or replace PACKAGE BODY pkg_state
    AS
       FUNCTION gv_test 
       RETURN VARCHAR2
       AS
       BEGIN
          RETURN 'Test!';
       END;
    
       FUNCTION get_variable
       RETURN VARCHAR2
       AS
       BEGIN
          RETURN 'TRUE';
       END get_variable;
    
    END pkg_state;
    /
    

    【讨论】:

    【解决方案2】:

    在甲骨文论坛(https://community.oracle.com/message/14756602#14756602)询问后是这样的:

    包只有一个带有 VARCHAR 常量的状态 - 没有数字或布尔值。 (例外:当初始化是计算时,它仍然是有状态的: v_var 常数:= 1+1; -- 有状态的)。

    这似乎在 12c 中得到了修复(但计算仍会导致有状态)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-01
      • 2015-04-30
      • 2012-01-10
      • 2014-12-26
      • 2016-08-02
      • 2016-01-30
      相关资源
      最近更新 更多