接收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
相关产品推荐
相关产品推荐

