You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oracle创建PKG_Class包体提示编译错误问题咨询

包体编译错误原因排查
  • 错误1:ClassUpdate存储过程UPDATE语句赋值逻辑颠倒

    UPDATE语法规则为UPDATE 表名 SET 表字段名 = 新值 WHERE 条件,原代码写反了赋值方向,把表原有字段值赋值给了输入参数,完全不符合更新需求。

  • 错误2:ClassUpdate存储过程存在多余无效代码
    Class表中不存在Width_Pool字段,代码中也没有定义Width_P参数,该行属于完全多余的错误代码,需要删除。
  • 可选优化项:避免与内置函数重名冲突
    Max是Oracle内置聚合函数,使用该字段时建议给表添加别名,避免Oracle解析时误判为函数调用引发错误。
快速定位编译错误方法

遇到包编译错误时可以直接执行以下语句,就能看到具体的错误行号和错误描述:

SELECT * FROM USER_ERRORS WHERE NAME = 'PKG_CLASS' AND TYPE = 'PACKAGE BODY';
修正后的包体完整代码
CREATE OR REPLACE PACKAGE Body PKG_Class IS
    PROCEDURE ClassAdd(
                ID_C in Class.Class_id%Type ,
                C_Type in Class.Tybe%Type ,
                C_Name in Class.Class_name%Type ,
                C_Max in Class.Max%Type )     
         IS
         BEGIN
         insert into Class
         values(ID_C, C_Type, C_Name, C_Max );
      Commit;
      END ClassAdd;
    
        PROCEDURE ClassUpdate( 
            ID_C in Class.Class_id%Type ,
                C_Type in Class.Tybe%Type ,
                C_Name in Class.Class_name%Type ,
                C_Max in Class.Max%Type )  

         IS
         BEGIN
         Update Class set 
           Tybe = C_Type,
           Class_name = C_Name,
           Max = C_Max
         WHERE Class_id = ID_C;
     Commit;
     END ClassUpdate;
    
        PROCEDURE ClassDelete( 
           ID_C in Class.Class_id%Type )
        IS
        BEGIN
        DELETE FROM Class WHERE 
        Class_id = ID_C;
      
    Commit;
    END ClassDelete;
    
        PROCEDURE ClassFind( 
            ID_C in Class.Class_id%Type ,
                C_Type out Class.Tybe%Type ,
                C_Name out Class.Class_name%Type ,
                C_Max out Class.Max%Type )  

     IS
     BEGIN
             SELECT Tybe, Class_name, Max
             INTO C_Type, C_Name, C_Max
             FROM Class
             WHERE Class_id = ID_C;
     END ClassFind;
    
        FUNCTION Find(
            ID_C in Class.Class_id%Type ,
                C_Type out Class.Tybe%Type ,
                C_Name out Class.Class_name%Type ,
                C_Max out Class.Max%Type 
        ) RETURN BOOLEAN
    
     IS
     BEGIN
     SELECT Tybe, Class_name, Max
     INTO C_Type, C_Name, C_Max
     FROM Class
     WHERE Class_id = ID_C;
     RETURN TRUE;
     Exception
     WHEN NO_DATA_FOUND THEN
     RETURN False;
     END Find;
    
        FUNCTION FindClass(
           ID_C in Class.Class_id%Type
        )  RETURN Class%ROWTYPE 
    IS
    RECORD_C Class%ROWTYPE;
    BEGIN
    SELECT * 
    Into RECORD_C
    From Class
    Where Class_id = ID_C;
    RETURN RECORD_C;
    END FindClass;
    
END PKG_Class;
/

内容的提问来源于stack exchange,提问作者Roka

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 15:21:01