在处理此类问题时,首先考虑您要捕获的数据。
在 PL/SQL 中处理隐式游标需要 1 行,因此您需要确保您理解数据。
在这种情况下,您传入了一个不会在任何查询中使用的变量,因此我建议您重新评估。
我手头没有数据库来运行它,但你应该能够解决这个问题,并希望让你更接近一点。我把它放在一个匿名块中,这样我就可以很快地写出来。
DECLARE
PROCEDURE model_details_sp (p_model IN VARCHAR2, p_noofcars OUT NUMBER)
IS
p_description VARCHAR2 (200);
BEGIN
--2
SELECT COUNT (model_name)
INTO p_noofcars
FROM i_car
WHERE model_name = p_model;
DBMS_OUTPUT.put_line ('No of Cars for model: ' || p_noofcars);
--3
SELECT model_description
INTO p_description
FROM i_car --the table should be the car_model table so that only one record is returned
WHERE model_name = p_model;
DBMS_OUTPUT.put_line ('Model Desc' || p_description);
END model_details_sp;
BEGIN
dbms_output.put_line('');
END;
致@David Aldridge 评论:
尝试运行这个——结果应该是失败——因为你不能使用 into CLAUS 选择多行,除非你聚合数据:
DECLARE
p_num NUMBER;
BEGIN
SELECT LEVEL INTO p_num FROM DUAL CONNECT BY LEVEL <= 10;
dbms_output.put(p_num);
END;
您应该看到的错误是:
错误报告:
ORA-01422:精确提取返回超过请求的行数 ORA-06512:在第 4 行 01422。00000 -“精确提取返回超过请求的行数” *原因:精确提取中指定的数量小于返回的行数. *行动:重写查询或更改请求的行数