MySQL脚本错误

时间:2015-07-26 05:46:31

标签: mysql

我是SQL编程的新手,我决定制作一个脚本。这个可能有很多错误,但我收到一个我无法解决的错误。

DELIMITER $

DROP FUNCTION IF EXISTS crossref$

CREATE FUNCTION crossref()
BEGIN
DECLARE i INT;
DECLARE names VARCHAR(70);

SET i = 1;

myloop: LOOP
    SET i=i+1;
        IF i = 6 then
        LEAVE myloop;
        END IF;
    SET names = (SELECT NAME FROM cbase_excel_table WHERE ID = i);

    INSERT INTO cbase_master(NAME, PERMALINK, HOMEPAGE_URL, CATEGORY_LIST, MARKET, FUNDING, 'STATUS', COUNTRY, REGION, CITY) 
    SELECT NAME, PERMALINK, HOMEPAGE_URL, CATEGORY_LIST, MARKET, FUNDING, 'STATUS', COUNTRY, REGION, CITY FROM cbase_excel_table WHERE ID = i;

    UPDATE cbase_master
    SET DESCRIPTION = (SELECT DESCRIPTION FROM cbase_json_table WHERE NAME = names)
    SET DOMAIN = (SELECT DOMAIN FROM cbase_json_table WHERE NAME = names)
    SET IMAGE_URL = (SELECT IMAGE_URL FROM cbase_json_table WHERE NAME = names)
    SET FACEBOOK_URL = (SELECT FACEBOOK_URL FROM cbase_json_table WHERE NAME = names)
    SET TWITTER_URL = (SELECT TWITTER_URL FROM cbase_json_table WHERE NAME = names)
    SET LINKEDIN_URL = (SELECT LINKEDIN_URL FROM cbase_json_table WHERE NAME = names)
    SET CBASE_UUID = (SELECT CBASE_UUID FROM cbase_json_table WHERE NAME = names);    



 END LOOP myloop;
END$
DELIMITER;

我得到了:

 #1064 - You have an error in your SQL syntax; check the manual that        corresponds to your MySQL server version for the right syntax to use near 'BEGIN
DECLARE i INT;
DECLARE names VARCHAR(70);

SET i = 1;

任何帮助?

1 个答案:

答案 0 :(得分:0)

显示功能主要差异的功能示例:

CREATE FUNCTION `fnFindMaximum`(`a` INT, `b` INT)
    /* Before the BEGIN statement there are other things going on - the most important being the return type statement */
    RETURNS int(11)
    LANGUAGE SQL
    DETERMINISTIC
    CONTAINS SQL
    SQL SECURITY DEFINER
    COMMENT ''
BEGIN
    DECLARE returnval INTEGER;
    IF a >= b THEN 
        SET returnval = a;
    ELSE 
        SET returnval = b;
    END IF;
    RETURN returnval;
END

然后你的函数继续操作sql,但是没有返回一个值,正如@arkhil所指出的那样,使用StoredProcedure而不是函数。