MySQL函数定义-';开始';(开始)在此位置不是有效的输入

MySQL函数定义-';开始';(开始)在此位置不是有效的输入,mysql,function,mysql-workbench,Mysql,Function,Mysql Workbench,我从MySQL的教科书上一字不差地输入了这个 红色X表示行BEGIN上有错误,文本“BEGIN”(BEGIN)在此位置不是有效输入 使用的数据库是View Ridge Gallery。代码有任何明显的问题吗 DROP FUNCTION IF EXISTS InsertCustomerAndInterests; DELIMITER $$ CREATE FUNCTION InsertCustomerAndInterests ( newLastName Char(25), n

我从MySQL的教科书上一字不差地输入了这个

红色X表示行BEGIN上有错误,文本“BEGIN”(BEGIN)在此位置不是有效输入

使用的数据库是View Ridge Gallery。代码有任何明显的问题吗

DROP FUNCTION IF EXISTS InsertCustomerAndInterests;

DELIMITER $$

CREATE FUNCTION InsertCustomerAndInterests
   (
newLastName         Char(25),
newFirstName        Char(25),
newAreaCode         Char(3),
newPhoneNumber      Char(8),
newEmail            Varchar(100),
newNationality      Char(30)
)
  BEGIN

DECLARE varRowCount     Int;
DECLARE varArtistID     Int;
DECLARE varCustomerID   Int;
DECLARE done            Int DEFAULT 0;
DECLARE AristCursor     CURSOR FOR
        SELECT      AristID
        FROM        ARTIST  
        WHERE       Nationality=newNationality;
DECLARE continue        HANDLER FOR NOT FOUND SET done = 1;

#Check to see if Customer already exists in datebase
SELECT Count(*) INTO varRowCount
FROM    CUSTOMER 
WHERE   LastName = newLastName
    AND FirstName = newFirstName
    AND AreaCode = newAreaCode
    AND PhoneNumber = newPhoneNumber
    AND Email = newEmail;
#IF (varRowCount > 0 ) THEN Customer already exists
IF (varRowCount > 0 ) 
    THEN 
        ROLLBACK; 
        SELECT 'Customer already exists';
    END IF;

#IF (varRowCount = 0 ) THEN Customer does not exist.
#Insert new Customer data
IF (varRowCount = 0)
    THEN 
        INSERT INTO CUSTOMER (LastName, FirstName, AreaCode, PhoneNumber, Email)
        VALUES (newLastName, newFirstName, newAreaCode, newPhoneNumber,        newEmail);
    #Get new CustomerID surrogate key value 
    SET varCustomerID = LAST_INSERT_ID();
#Create intersection record for each appropriate Arist.

OPEN AristCursor;
REPEAT
    FETCH ArtistCursor INTO varArtistArtistID;
        IF NOT done THEN
            INSERT INTO CUSTOMER_ARTIST_INT (ArtistID, CustomerID)
                VALUES (varArtistID, varCustomerID);
            END IF;
UNTIL done END REPEAT;
CLOSE ArtistCursor;
SELECT 'New customer and artist interest data added to database.'
    AS InsertCustomerAndInterestsResults;

END IF;
END

$$
DELIMITER ;

由于所有函数都需要返回值和返回类型,因此在声明参数后,您将缺少
RETURNS
子句。请参见

您需要在开始之前添加返回类型,并且必须从函数返回值

 DELIMITER $$

    DROP FUNCTION IF EXISTS `InsertCustomerAndInterests`$$

    CREATE  FUNCTION `InsertCustomerAndInterests`(
    newLastName         CHAR(25),
    newFirstName        CHAR(25),
    newAreaCode         CHAR(3),
    newPhoneNumber      CHAR(8),
    newEmail            VARCHAR(100),
    newNationality      CHAR(30)
    ) RETURNS INT(11) # you missed return type here.
    BEGIN
    DECLARE done INT DEFAULT 0;


            RETURN done; # must match with return type
    END$$

    DELIMITER ;

如果你把//换成#,他就可以把整件事都搞定。否则,您可能无法获得信任,因为您的注释本身会导致语法错误