重庆思庄Oracle、KingBase、PostgreSQL、Redhat认证学习论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 8|回复: 0
打印 上一主题 下一主题

[讨论] 实验记录:Oracle定时任务(Job)执行失败;ORA-06576调用的存储过程/函数无效

[复制链接]
跳转到指定楼层
楼主
发表于 3 小时前 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 Inkcup 于 2026-5-8 00:29 编辑

步骤1:创建用户(如果未创建)

CONN / AS SYSDBA

-- 创建用户
CREATE USER ZLHIS IDENTIFIED BY ZLHIS
DEFAULT TABLESPACE USERS
QUOTA UNLIMITED ON USERS;

-- 授予权限
GRANT CONNECT, RESOURCE, CREATE JOB TO ZLHIS;
GRANT CREATE PROCEDURE TO ZLHIS;
GRANT EXECUTE ON DBMS_JOB TO ZLHIS;
GRANT EXECUTE ON DBMS_SCHEDULER TO ZLHIS;

步骤2:切换到 ZLHIS 用户CONN ZLHIS/ZLHIS

步骤3:创建空的存储过程(模拟真实场景)-- 创建一个简单的存储过程
CREATE OR REPLACE PROCEDURE ZLHIS.AUTOMASSAGEDEL
IS
BEGIN
  -- 稍后会添加真正的业务逻辑
  DBMS_OUTPUT.PUT_LINE('AUTOMASSAGEDEL executed at: ' || TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS'));
  
  -- 模拟删除过期消息
  -- DELETE FROM MESSAGES WHERE CREATE_DATE < SYSDATE - 30;
  -- COMMIT;
END;
/

-- 验证存储过程状态
SELECT OBJECT_NAME, OBJECT_TYPE, STATUS
FROM USER_OBJECTS
WHERE OBJECT_NAME = 'AUTOMASSAGEDEL';

步骤4:创建定时任务-- 使用 DBMS_JOB 创建
DECLARE
  jobno NUMBER;
BEGIN
  DBMS_JOB.SUBMIT(
    job       => jobno,
    what      => 'AUTOMASSAGEDEL;',
    next_date => SYSDATE,
    interval  => 'SYSDATE + 1/1440'  -- 每分钟执行一次
  );
  COMMIT;
  DBMS_OUTPUT.PUT_LINE('Job created successfully, Job ID: ' || jobno);
END;
/

-- 查看创建的任务
SELECT JOB, WHAT, NEXT_DATE, BROKEN, FAILURES, LAST_DATE
FROM USER_JOBS;

步骤5:模拟问题场景


场景A:让存储过程变为无效-- 删除依赖的对象(如果有)
-- 或者修改存储过程引入错误
CREATE OR REPLACE PROCEDURE ZLHIS.AUTOMASSAGEDEL
IS
  v_count NUMBER;
BEGIN
  SELECT COUNT(*) INTO v_count FROM NON_EXISTENT_TABLE;  -- 这个表不存在
  DBMS_OUTPUT.PUT_LINE('Count: ' || v_count);
END;
/

-- 查看状态(应该是 INVALID)
SELECT OBJECT_NAME, STATUS FROM USER_OBJECTS WHERE OBJECT_NAME = 'AUTOMASSAGEDEL';

-- 查看编译错误
SHOW ERRORS
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 支持支持 反对反对
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|手机版|小黑屋|重庆思庄Oracle、Redhat认证学习论坛 ( 渝ICP备12004239号-4 )

GMT+8, 2026-6-21 16:42 , Processed in 0.348536 second(s), 24 queries .

重庆思庄学习中心论坛-重庆思庄科技有限公司论坛

© 2001-2020

快速回复 返回顶部 返回列表