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

Package Body删除操作持续执行未完成,函数因误加代码无法使用求助

问题与解决方案

问题描述

在Package Body中误添加了以下代码段,包编译完成后,涉事函数一直处于执行状态,执行drop package body操作也无法完成:

if admtrans.code_total(codes,datec,102) = 1 then 
        return  null;
            end if;

解决步骤

  • 定位异常会话
    执行以下SQL查询,找到关联的会话信息(需DBA权限):

    SELECT s.sid, s.serial#, s.username, sql.sql_text
    FROM v$session s
    LEFT JOIN v$sql sql ON s.sql_id = sql.sql_id
    WHERE sql.sql_text LIKE '%admtrans.code_total%' 
       OR s.program LIKE '%你的包名%'; -- 替换为实际包名
    

    也可通过锁定对象查询:

    SELECT s.sid, s.serial#, o.object_name
    FROM v$locked_object lo
    JOIN v$session s ON lo.session_id = s.sid
    JOIN dba_objects o ON lo.object_id = o.object_id
    WHERE o.object_name = '你的包名'; -- 替换为实际包名
    
  • 终止异常会话
    拿到查询到的SID和SERIAL#后,执行终止命令:

    ALTER SYSTEM KILL SESSION 'SID,SERIAL#' IMMEDIATE;
    

    如果会话无法通过SQL终止,查询操作系统进程号(SPID)后用系统命令终止:

    SELECT p.spid
    FROM v$process p
    JOIN v$session s ON p.addr = s.paddr
    WHERE s.sid = 你的SID; -- 替换为查询到的SID
    

    Linux/Unix环境执行kill -9 SPID,Windows环境通过任务管理器结束对应进程。

  • 重新处理包
    会话终止后,执行删除包体命令:

    DROP PACKAGE BODY 你的包名;
    

    修正Package Body中的错误代码,重新编译:

    CREATE OR REPLACE PACKAGE BODY 你的包名 AS
        -- 移除误加的代码段,保留正确逻辑
    END 你的包名;
    /
    
  • 排查根源(可选)
    检查admtrans.code_total函数是否存在死循环、锁等待或资源占用过高的问题,避免后续重复触发此类异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 06:35:13