我正在尝试将老师给出的 SQL Server 中的代码转换为 MySQL。它最终应该允许我将信息输入到制作的表格中。这是一份留言簿作业。不幸的是,我找不到正确的语法,因为我以前从未接触过一般的 SQL 编程。
我尝试使用括号、分号和逗号来表示信息,并添加一个分隔符来消除最初在编程中出现的“无法识别的语句类型(靠近 PROCEDURE)”错误消息。
教师代码:
CREATE PROCEDURE spInsertGuestbookEntry
@GuestBookName varchar(200),
@GuestBookEntry ntext,
@GuestbookEmail varchar(200),
@GuestBookIP varchar(20)
AS
BEGIN
SET NOCOUNT ON;
INSERT INTO Guestbook
(GuestbookName, GuestBookEntry, GuestbookEmail, GuestBookIP, GuestBookDate)
VALUES
(@GuestbookName, @GuestBookEntry, @GuestbookEmail, @GuestBookIP, GetDate())
END
GO
我的修改:
DELIMITER $$
CREATE PROCEDURE spInsertGuestbookEntry
@GuestBookName varchar(200)
@GuestBookEntry text
@GuestbookEmail varchar(200)
@GuestBookIP varchar(20)
@GuestBookDate date
AS
BEGIN
SET NOCOUNT ON;
INSERT INTO Guestbook
(GuestbookName, GuestBookEntry, GuestbookEmail, GuestBookIP, GuestBookDate)
VALUES
(@GuestbookName, @GuestBookEntry, @GuestbookEmail, @GuestBookIP, @GuestBookDate)
END
GO
我收到的错误消息是“无法识别的数据类型。(near))”该错误消息是由 @GuestBookName varchar(200) 发出的
最佳答案
DELIMITER $$
CREATE PROCEDURE `spInsertGuestbookEntry`(
IN `str_GuestBookName` VARCHAR(200),
IN `str_GuestBookEntry` TEXT,
IN `str_GuestbookEmail` VARCHAR(200),
IN `str_GuestBookIP` VARCHAR(20)
)
LANGUAGE SQL
NOT DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
COMMENT ''
BEGIN
INSERT INTO Guestbook
(GuestbookName, GuestBookEntry, GuestbookEmail, GuestBookIP, GuestBookDate)
VALUES
(str_GuestBookName, str_GuestBookEntry, str_GuestbookEmail, str_GuestBookIP, CURRENT_DATE());
END
$$
需要考虑的要点:
- 区分
表column_name
和过程输入参数
。 @
用于在 MySQL 中创建用户定义变量,如果调用过程时参数的类型为OUT/INOUT
,则应该使用此变量。- 在过程/函数创建中,使用简单的变量名称,而不是使用
@
符号,否则在使用这些参数时,MySQL将查找具有该名称的变量,而不是输入参数。
关于mysql - 尝试将 SQL Server 转换为 MySql 进行类(class),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57659792/