为什么我的Sql脚本不起作用?

时间:2015-10-18 03:16:17

标签: mysql mysql-error-1064

我是MySQL的新手 我正在尝试生成随机数据并将其放入表'数据'

但SQL shell说我的sql代码有语法错误
但我找不到原因

DECLARE @counter smallint;
DECLARE @A BOOLEAN;
DECLARE @B BOOLEAN;
DECLARE @C int(4);
DECLARE @LABEL BOOLEAN;

SET @counter = 1;
WHILE @counter < 100
    BEGIN
       IF 0.5 > RAND()
            SET @A = TRUE;
        ELSE
            SET @A = FALSE;
        IF 0.5 > RAND()
            SET @B = TRUE;
        ELSE
            SET @B = FALSE;

        SET @C = RAND() * 10
        SET @LABEL = @A ^ @B OR @LABEL > 5

        INSERT INTO data (A,B,C,LABEL) VALUES (@A,@B,@C,@LABEL)
        @count = @count +1
    END

它说我有语法问题 来自声明变量

你可以帮帮我吗?

2 个答案:

答案 0 :(得分:0)

试试这个,

DECLARE @counter smallint,
DECLARE @A BOOLEAN,
DECLARE @B BOOLEAN,
DECLARE @C int(4),
DECLARE @LABEL BOOLEAN;

答案 1 :(得分:0)

缺少一些语法词:

  • IF ... THEN ... ELSE ... END IF;
  • WHILE ... DO ... END WHILE;

重要的是要明白用户变量是以 @var_name 编写的,因此用户定义的变量是特定于会话的。也就是说,其他客户端无法看到或使用由一个客户端定义的用户变量。当客户端退出时,将自动释放给定客户端会话的所有变量。在这种情况下,我认为没有必要。

SET=:=都可以用作赋值运算符。

试试这个:

delimiter //

CREATE PROCEDURE TEST()
BEGIN
    DECLARE counter smallint;
    DECLARE A BOOLEAN;
    DECLARE B BOOLEAN;
    DECLARE C int(4);
    DECLARE LABEL BOOLEAN;

    SET counter = 1;
    WHILE counter < 100 DO
        IF 0.5 > RAND() THEN
            SET A = TRUE;
        ELSE
            SET A = FALSE;
        END IF;

        IF 0.5 > RAND() THEN
            SET B = TRUE;
        ELSE
            SET B = FALSE;
        END IF;

        SET C = RAND() * 10;

        IF A ^ B OR LABEL > 5 THEN
            SET LABEL = TRUE;
        ELSE
            SET LABEL = FALSE;
        END IF;

        INSERT INTO data (A,B,C,LABEL) VALUES (A,B,C,LABEL);
        SET counter = counter +1;
    END WHILE;
END//