1
这里的程序:Oracle过程错误:数字或值错误:数字精度太大?
CREATE OR REPLACE PROCEDURE GetBestSellingMovieByTimeId(timeId IN NUMBER) IS
movieName Movie.Name%type;
saleValue Sales.SaleValue%type;
BEGIN
SELECT * INTO movieName, salevalue FROM (
SELECT m.Name, SUM(s.SaleValue) AS TotalSales
FROM Sales s
INNER JOIN Movie m ON s.MovieId = m.MovieId
WHERE s.TimeId = timeId
GROUP BY m.Name ORDER BY TotalSales DESC
) WHERE ROWNUM = 1;
dbms_output.put_line(movieName ||', ' || saleValue);
END;
/
exec GetBestSellingMovieByTimeId(2);
这里的错误:
Error starting at line 190 in command: exec GetBestSellingMovieByTimeId(2)
Error report:
ORA-06502: PL/SQL:numeric or value error: number precision too large
ORA-06512: at "CM420B17.GETBESTSELLINGMOVIEBYTIMEID", line 5
ORA-06512: at line 1
06502. 00000 - "PL/SQL: numeric or value error%s"
*Cause:
*Action:
TIMEID是一个数字(2,0)FK在销售表。将数字2传递给过程不应超出NUMBER(2,0)数据类型的范围。
为什么这个程序认为IN参数太大?
您是否尝试使用Developer或SQL * Plus上的参数在函数内部运行查询?在我看来,你的saleValue变量对于结果来说太短了。 – tilley31
错误在第5行 - > SELECT * INTO movieName,salevalue FROM ...什么是saleValue Sales.SaleValue%类型的类型?该过程试图为此变量分配SUM(xxx)的结果,该结果的类型为NUMERIC。 – krokodilko
这正是问题所在。 SaleValue的NUMBER字段太小,无法保存销售额的总和。谢谢@ tilly31和kordirko,问题已解决。 – Chaddeus