首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在试图调用包体函数中的过程时遇到PLS-00103错误

在试图调用包体函数中的过程时遇到PLS-00103错误
EN

Stack Overflow用户
提问于 2022-05-17 00:06:16
回答 1查看 17关注 0票数 0

我是SQL的初学者,我试着练习软件包,并且有一个过程和函数。我制定了一个程序,把所有的物品分成一个包,如果有的话,还有剩菜。然后,我有一个函数,返回订购商品的总成本。它使用这个过程将项目分成一个包和一个剩菜。包乘以给定的成本,剩余的乘以设定的成本,然后两者相加。不过,我在编译函数时遇到了麻烦。

这些错误说:

PLS-00103:遇到符号"=“时需要下列之一:常量异常表long double ref char时间戳间隔日期二进制国家字符nchar符号”被替换为"=“继续。当期望下列之一时遇到符号"END“:过程子类型当前游标删除优先存在

代码语言:javascript
运行
复制
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;
EN

回答 1

Stack Overflow用户

发布于 2022-05-17 06:14:52

不需要使用内部DECLARE-BEGIN-END块(包括过程和功能);因此:

  • remove declare (这不是一个匿名PL/SQL块),
  • 重新定位begin
  • 将数据类型添加到leftover_cost (并删除冒号)H 210F 211

就像这样:

代码语言:javascript
运行
复制
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>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72266851

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档