2015-05-16 3 views
-3
DELIMITER // 
CREATE PROC InserimentoValori() 
BEGIN 
    DECLARE @caratteri varchar(30); 
    set @caratteri = 'abcdefghijklmnopqrstuvwxyz', 
    DECLARE x INT DEFAULT 1; 
    WHILE x <=100 DO 
    INSERT INTO Persona(nome,cognome,eta) VALUES((SELECT @caratteri = substring(@caratteri +1),(SELECT @caratteri = sebstring(@caratteri +1),(SELECT floor(rand() * 99) AS randNum)); 
    SET x = x+1; 
END WHILE 
END // 
DELIMITER ; 

Я хочу создать хранимую процедуру, которая вставляет случайные значения в таблицу. ThanksГде ошибка в этой хранимой процедуре

+0

Как ваш код не работает? Или вы просто хотели, чтобы мы случайно догадались? – David

+3

Sebstring() ...? –

+0

Sebstring - клерикальная ошибка ... – Humanbeings

ответ

0

Есть пара ошибок.

Мы не объявляем определяемые пользователем переменные в MySQL. Всего SET их.

Если вы хотите указать DECLARE переменную в процедуре, которая должна быть переменной переменной.

определена переменная пользователь имеет имя, которое начинается с символа @. A процедура переменная не может начинаться с @ знак.

Таким образом, линия, как это ошибка:

DECLARE @foo ... 

Если вы хотите использовать определенный пользователь переменным, удалите эту строку. Если вы хотите использовать переменную процедуру, удалите @ с начала имени переменной (и сделать это же самое изменение везде вы хотите сослаться на процедуру переменной foo.)

И SEBSTRING не имя MySQL при условии функция.

Кроме того, булево выражение в списке SELECT запроса возвращает 0, 1 или NULL.

Например:

SELECT @caratteri = substring(@caratteri +1) 

Это выражение сравнивает значение на левой стороне = со значением справа, и собирается вернуться 1, если они равны, или 0 если Арен 't или NULL, если одно из значений равно NULL.

Чтобы выполнить назначение пользовательской переменной в инструкции SELECT, используйте оператор Pascal-стиля :=.

(Если вы хотите выполнить задание, дизайн делает его похожим на то, что вы гогины, чтобы каждый раз пропустить первый символ в цикле, что в конечном итоге станет пустой строкой, если мы достаточно продолжим цикл. возможно, захотят подумать о том, чтобы оставить статическую строку. Рассмотрите возможность увеличения целых значений и используйте их как аргументы в функции SUBSTRING. И вы можете использовать оператор MOD, чтобы получить целочисленное значение для «wrap».)

+0

Итак, как я могу изменить ее для ее работы? – Humanbeings

+0

FYI: StackOverflow разработан как ** вопрос ** и ** ответ ** сайт. Он не предназначен для сброса «pleez debug my codez for me», замаскированный под вопрос. Для получения дополнительной информации см. [Ericlippert.com/2014/03/05/how-to-debug-small-programs/](http://ericlippert.com/2014/03/05/how-to-debug-small -программы /) – spencer7593

Смежные вопросы