我是SQL的初学者,我试着练习软件包,并且有一个过程和函数。我制定了一个程序,把所有的物品分成一个包,如果有的话,还有剩菜。然后,我有一个函数,返回订购商品的总成本。它使用这个过程将项目分成一个包和一个剩菜。包乘以给定的成本,剩余的乘以设定的成本,然后两者相加。不过,我在编译函数时遇到了麻烦。
这些错误说:
PLS-00103:遇到符号"=“时需要下列之一:常量异常表long double ref char时间戳间隔日期二进制国家字符nchar符号”被替换为"=“继续。当期望下列之一时遇到符号"END“:过程子类型当前游标删除优先存在
CREATE OR REPLACE PACKAGE BODY package01 AS
PROCEDURE split
(
items IN NUMBER,
item_pack OUT NUMBER,
leftovers OUT NUMBER
)
AS
BEGIN
DECLARE std_pack NUMBER := 50;
BEGIN
IF items <= std_pack THEN
item_pack := 1;
leftovers := 0;
ELSE
item_pack := std_pack;
leftovers := items - std_pack;
END IF;
END;
END;
FUNCTION compute_total (
items_param NUMBER,
item_cost NUMBER
) RETURN NUMBER
AS
total NUMBER;
BEGIN
DECLARE
another_item_pack NUMBER;
leftover_items NUMBER;
leftover_cost := .10;
split(items_param, another_item_pack, leftover_items);
total := (another_item_pack * item_cost) + (leftover_cost * leftover_items);
RETURN total;
END;
END package01;发布于 2022-05-17 06:14:52
不需要使用内部DECLARE-BEGIN-END块(包括过程和功能);因此:
declare (这不是一个匿名PL/SQL块),begin,leftover_cost (并删除冒号)H 210F 211就像这样:
SQL> CREATE OR REPLACE PACKAGE BODY package01
2 AS
3 PROCEDURE split (items IN NUMBER,
4 item_pack OUT NUMBER,
5 leftovers OUT NUMBER)
6 AS
7 std_pack NUMBER := 50;
8 BEGIN
9 IF items <= std_pack
10 THEN
11 item_pack := 1;
12 leftovers := 0;
13 ELSE
14 item_pack := std_pack;
15 leftovers := items - std_pack;
16 END IF;
17 END;
18
19 FUNCTION compute_total (items_param NUMBER, item_cost NUMBER)
20 RETURN NUMBER
21 AS
22 total NUMBER;
23 another_item_pack NUMBER;
24 leftover_items NUMBER;
25 leftover_cost NUMBER := .10;
26 BEGIN
27 split (items_param, another_item_pack, leftover_items);
28
29
30 total :=
31 (another_item_pack * item_cost) + (leftover_cost * leftover_items);
32
33 RETURN total;
34 END;
35 END package01;
36 /
Package body created.
SQL>https://stackoverflow.com/questions/72266851
复制相似问题