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

接收item_num的PL/SQL存储过程无法运行求助(数据库课程作业)

数据库管理课程作业:PL/SQL存储过程运行异常求助

各位好,我正在做数据库管理课的作业,可选工具是校园电脑上的Oracle SQL Developer或者SSH Secure Shell,我用的是后者。我的任务是编写一个PL/SQL存储过程,要求接收item_num参数,查询item表后返回对应商品的description、price和on_hand库存数量,但这个存储过程一直没法正常运行。教授还要求在存储过程前添加若干指定命令,我目前的代码开头是:

serveroutput on;
accept item_num prompt '请输入商品编号:'

有没有大佬能帮我排查下问题?我先梳理几个自己想到的可能方向,也欢迎大家补充:

  • 参数类型不匹配:会不会是存储过程里item_num参数的类型和item表中对应字段的类型没对齐?比如表中字段是VARCHAR2,我却把参数定义成NUMBER了?
  • 输出逻辑有问题:因为用的是SSH Secure Shell环境,是不是serveroutput的开启方式不对?或者存储过程里没正确调用DBMS_OUTPUT来输出结果?
  • 权限或语法错误:有没有可能我没有查询item表的权限?或者存储过程的语法有遗漏,比如少了BEGIN/END块,或者字段名、表名拼写出错了?

我也整理了一份我认为应该正确的示例代码,大家可以帮我对比看看和我写的有啥差异:

-- 先执行开启输出的命令
SET SERVEROUTPUT ON;
ACCEPT item_num PROMPT '请输入商品编号:';

-- 创建存储过程
CREATE OR REPLACE PROCEDURE get_item_details(p_item_num IN item.item_num%TYPE)
IS
    v_description item.description%TYPE;
    v_price item.price%TYPE;
    v_on_hand item.on_hand%TYPE;
BEGIN
    SELECT description, price, on_hand
    INTO v_description, v_price, v_on_hand
    FROM item
    WHERE item_num = p_item_num;
    
    -- 打印查询结果
    DBMS_OUTPUT.PUT_LINE('商品描述: ' || v_description);
    DBMS_OUTPUT.PUT_LINE('商品价格: ' || v_price);
    DBMS_OUTPUT.PUT_LINE('库存数量: ' || v_on_hand);
    
-- 添加异常处理,避免无数据或其他错误导致程序崩溃
EXCEPTION
    WHEN NO_DATA_FOUND THEN
        DBMS_OUTPUT.PUT_LINE('抱歉,未找到编号为' || p_item_num || '的商品');
    WHEN OTHERS THEN
        DBMS_OUTPUT.PUT_LINE('查询出错啦: ' || SQLERRM);
END;
/

-- 调用存储过程
EXEC get_item_details(&item_num);

如果需要,我可以把自己写的完整代码贴出来,麻烦各位帮忙看看啦!

内容的提问来源于stack exchange,提问作者J.Speer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:52:15