【问题标题】:An error in SQL procedure parameters of type varcharvarchar 类型的 SQL 过程参数中的错误
【发布时间】:2021-07-23 00:42:27
【问题描述】:

我是一个初学者,试图创建一个返回隔离中心单元中可用床位数量的程序。

  • UID 是指单元 ID(4 个字符),
  • CID 指的是中心 ID(6 个字符)。
create procedure getAvailableBeds(@UID varchar(4), @CID varchar(6), @emptyBeds int output)
as
begin
    declare @bedNum int, @patientNum int

    select @bedNum = NoOfBeds, @patientNum = NoOfPatients
    from Unit
    where @UID = UID and @CID = CID

    @emptyBeds = @bedNum – @patientNum
End

错误;

#1064 - 您的 SQL 语法有错误;查看与您的 MariaDB 服务器版本相对应的手册,了解在 '@UID varchar(4)、@CID varchar(6)、@emptyBeds int 输出附近使用的正确语法) 作为 开始 在第 1 行声明...'

我似乎无法找出我的代码中的错误,我需要一些帮助。

【问题讨论】:

  • @emptyBeds = @bedNum – patientNum 缺少 @ for patientNum
  • 感谢@Stu,但它仍然与错误消息不对应。
  • 不需要set @emptyBeds = ...吗? AFAICT,不推荐使用没有set 的变量,并且不需要工作,并且在没有set 的情况下,您想要这样可能是模棱两可的。分号也有帮助...
  • 是的,这也是@underscore_d。看起来这里和那里有一些小的语法错误:)。但是,我仍然坚持消息中显示的错误,第 1 行。我似乎无法弄清楚。
  • @name 是用户定义的变量。它不能用作过程参数。

标签: mysql phpmyadmin mariadb


【解决方案1】:
CREATE PROCEDURE getAvailableBeds (IN  UID VARCHAR(4), 
                                   IN  CID VARCHAR(6), 
                                   OUT emptyBeds INT)
BEGIN
    SELECT unit.NoOfBeds - unit.NoOfPatients 
    INTO emptyBeds 
    FROM unit
    WHERE UID = unit.UID 
      AND CID = unit.CID;
END

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-03
    • 2013-12-02
    • 1970-01-01
    • 1970-01-01
    • 2015-07-21
    • 1970-01-01
    • 2019-05-19
    相关资源
    最近更新 更多