Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Проблема с присваиванием переменной значения / 12 сообщений из 12, страница 1 из 1
08.04.2014, 18:33:23
    #38608938
bnoazx005
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с присваиванием переменной значения
Требуется написать хранимую процедуру для создания записей в 2 таблицах. Сначала я заношу запись в одну таблицу, а затем пытаюсь сохранить значение, сгенерированное для первичного ключа, в переменную, чтобы потом использовать его для создания второй записи в другой таблице. Делаю так, как описанно в книжках, но не получается создать процедуру из-за ошибки. Ниже прилагаю код. Таблицы для начала создал простые, чтобы понять принцип
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
CREATE TABLE tbl2 
(
    id_note INT(11) NOT NULL AUTO_INCREMENT,
    note TINYTEXT NULL,
    PRIMARY KEY(id_note)
)ENGINE = InnoDB;

CREATE TABLE tbl1
(
    id INT(11) NOT NULL AUTO_INCREMENT,
    name VARCHAR(30) NOT NULL,
    id_note INT(11) NOT NULL,
    PRIMARY KEY(id),
    FOREIGN KEY(id_note) REFERENCES tbl2(id_note)
        ON DELETE CASCADE
        ON UPDARE CASCADE
)ENGINE = InnoDB;

DELIMITER //

CREATE PROCEDURE add (name VARCHAR(30), note TINYTEXT)
BEGIN
    INSERT IGNORE INTO tbl2 VALUES(NULL,note);
    DECLARE last_id INT(11);
    SELECT LAST_INSERT_ID() INTO last_id;
    INSERT IGNORE INTO tbl1 VALUES(NULL,name,last_id);
END
//
...
Рейтинг: 0 / 0
08.04.2014, 18:36:16
    #38608943
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с присваиванием переменной значения
Вы бы хоть доку почитали...
http://dev.mysql.com/doc/refman/5.5/en/declare.html DECLARE is permitted only inside a BEGIN ... END compound statement and must be at its start, before any other statements.
...
Рейтинг: 0 / 0
08.04.2014, 18:46:48
    #38608952
bnoazx005
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с присваиванием переменной значения
miksoftВы бы хоть доку почитали...
http://dev.mysql.com/doc/refman/5.5/en/declare.html DECLARE is permitted only inside a BEGIN ... END compound statement and must be at its start, before any other statements.
Спасибо, теперь все работает. Кстати, документацию действительно не посмотрел, изучаю MySQL по учебнику Кузнецова, Симдянова: там про эту особенность оператора DECLARE вроде как вообще не сказано.
...
Рейтинг: 0 / 0
08.04.2014, 18:50:58
    #38608958
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с присваиванием переменной значения
bnoazx005,

На мой взгляд, MySQL вообще не нуждается в учебниках, у него вполне приличная документация. Правда, на английском.
...
Рейтинг: 0 / 0
08.04.2014, 18:58:04
    #38608964
bnoazx005
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с присваиванием переменной значения
Английский не помеха, так как большинство статей по программированию читаю именно на нем, просто в этот раз как-то забыл про документацию.
...
Рейтинг: 0 / 0
09.04.2014, 12:19:31
    #38609624
alex564657498765453
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с присваиванием переменной значения
bnoazx005,

и раз уж учитесь, то
Код: sql
1.
2.
3.
4.
5.
--не кошерно
SELECT LAST_INSERT_ID() INTO last_id;

--кошерно
set last_id = LAST_INSERT_ID();
...
Рейтинг: 0 / 0
22.06.2014, 13:18:45
    #38676536
SQL2008
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с присваиванием переменной значения
miksoftbnoazx005,

На мой взгляд, MySQL вообще не нуждается в учебниках, у него вполне приличная документация. Правда, на английском.
Только один маленький нюанс - часто не работает по писанному!
При ошибках дается ссылка на код ошибки, а расшифровки ошибки нет.
Вот, например, ссылка на ошибку #1064
И что можно из этого понять?
...
Рейтинг: 0 / 0
22.06.2014, 13:29:08
    #38676543
SQL2008
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с присваиванием переменной значения
Начинаем поиск решения
Это не работает!
...
Рейтинг: 0 / 0
22.06.2014, 13:31:24
    #38676544
SQL2008
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с присваиванием переменной значения
Официальный документ! Не работает!
На всякий случай:
Версия сервера: 5.1.63-log
Версия MySQL-клиента: 5.1.57
...
Рейтинг: 0 / 0
22.06.2014, 13:56:28
    #38676554
SQL2008
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с присваиванием переменной значения
Установил MySQL Administrator локально.
Cоздал хранимую процедуру на сервере согласно описанию.
Вывод - проблемы были вызваны "кривизной" phpMyAdmin!
...
Рейтинг: 0 / 0
22.06.2014, 13:58:30
    #38676555
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с присваиванием переменной значения
SQL2008,

Обратите внимание в каком разделе находится эта страница доки. И где вы пытаетесь это применять? Показывайте код полностью, а отдельная строчка с declare и не должна работать.
...
Рейтинг: 0 / 0
22.06.2014, 14:52:57
    #38676588
SQL2008
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с присваиванием переменной значения
miksoft, спасибо!
Я уже разобрался.
Через phpMyAdmin не получается создать процедуру через CREATE.
Почему - уже не важно.
Главное,что найден способ.
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Проблема с присваиванием переменной значения / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]