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

Oracle PL/SQL游标循环日期校验代码DBMS_OUTPUT无输出问题

PL/SQL资产日期校验代码无输出问题修复

存在的问题

  • 未赋值的row_two变量导致判断永远不触发
    你声明的row_two jaherna42.ci_inventory%rowtype全程没有做赋值操作,变量值为NULL,Oracle中任意日期和NULL做比较的结果都是未知,不会进入IF判断分支,因此没有任何输出。
  • 行类型声明与游标返回结构不匹配
    你定义的task_five游标返回的是两张表关联后的3个字段,和你声明的jaherna42.employee_ci%rowtype结构并不一致,且FOR循环中的row_one是Oracle隐式生成的局部变量,会覆盖你外层声明的同名变量,你提前声明的两个行类型变量全程没有实际作用。
  • 可选前置检查:未开启DBMS_OUTPUT输出
    如果修复逻辑问题后仍无输出,需要先执行SET SERVEROUTPUT ON;开启输出权限,否则DBMS_OUTPUT的内容不会打印到控制台。

修复后代码

-- 执行前先开启输出
SET SERVEROUTPUT ON;

DECLARE
CURSOR task_five IS 
SELECT a.date_assigned, a.ci_inv_id, b.ci_acquired_date 
FROM jaherna42.employee_ci a 
JOIN jaherna42.ci_inventory b
ON a.ci_inv_id = b.ci_inv_id
WHERE a.user_or_support = 'USER';
-- 直接使用游标%rowtype定义变量,完全匹配返回结果结构
v_task_row task_five%ROWTYPE;
BEGIN
    FOR v_task_row IN task_five 
    LOOP
        -- 直接用游标返回的两个日期字段做判断,不需要额外声明无关行变量
        IF v_task_row.date_assigned < v_task_row.ci_acquired_date
        THEN 
            DBMS_OUTPUT.PUT_LINE('异常资产ID:' || v_task_row.ci_inv_id);
            DBMS_OUTPUT.PUT_LINE('资产分配日期:' || TO_CHAR(v_task_row.date_assigned,'YYYY-MM-DD'));
            DBMS_OUTPUT.PUT_LINE('资产采购日期:' || TO_CHAR(v_task_row.ci_acquired_date,'YYYY-MM-DD'));
            DBMS_OUTPUT.PUT_LINE('-----------------------------------');
        END IF;
    END LOOP;
END;
/

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 18:54:02