Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / MySQL 5.0.16 тригеры, процедуры, функции - сложная проверка / 7 сообщений из 7, страница 1 из 1
28.12.2005, 10:38:09
    #33461173
ОКТОГЕН
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MySQL 5.0.16 тригеры, процедуры, функции - сложная проверка
Имеется следующая БД:
Код: plaintext
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.
29.
30.
create table firstk
(
id bigint unsigned not null auto_increment,
name char( 20 ),
primary key(id)
)type = InnoDB;

create table secondk
(
id bigint unsigned not null auto_increment,
fktest bigint unsigned,
name char( 20 ),
primary key(id),
foreign key(fktest) references firstk(id) on update cascade,
foreign key(fktest) references firstk(id) on delete set null
)type = InnoDB;

create table main_table
(
id bigint unsigned not null auto_increment,
fktest1 bigint unsigned, 
sktest1 bigint unsigned,
param_test double( 15 , 5 ) not null,
primary key(id),

foreign key(fktest1) references firstk(id) on update cascade,
foreign key(fktest1) references firstk(id) on delete set null,
foreign key(sktest1) references secondk(id) on update cascade,
foreign key(sktest1) references secondk(id) on delete set null
)type = InnoDB;

как сделать так, чтобы при вставке в таблицу
main_table запись проверялась на следующие условия:

1) в таблице second запись номер main_table.sktest должна иметь значение
поля fktest равным значению main_table.fktest1

2) main_table.param_test должен равняться const/main_table.firstk

если запись неудовлетворяет условиям, вставка должна быть отменена.
...
Рейтинг: 0 / 0
28.12.2005, 10:50:49
    #33461216
ОКТОГЕН
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MySQL 5.0.16 тригеры, процедуры, функции - сложная проверка
в триггере после вставки main_table я прописал следующее:
if const/new.firstk<> new.param_test then delete from main_table where main_table_id= new.id.
не заработало.
...
Рейтинг: 0 / 0
29.12.2005, 13:20:14
    #33464193
ОКТОГЕН
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MySQL 5.0.16 тригеры, процедуры, функции - сложная проверка
решено.
если кому интересно-
могу рассказать как я это сделал
...
Рейтинг: 0 / 0
29.12.2005, 13:46:08
    #33464274
4m@t!c
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MySQL 5.0.16 тригеры, процедуры, функции - сложная проверка
>могу рассказать как я это сделал
рассказывайте.
----------------------------------------
Артисты не приехали, приехали цыгане
...
Рейтинг: 0 / 0
29.12.2005, 19:03:10
    #33465044
ОКТОГЕН
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MySQL 5.0.16 тригеры, процедуры, функции - сложная проверка
наткнулся на ссылки
http://dev.mysql.com/tech-resources/articles/evaluating-mysql-5.0-rus.html
http://dev.mysql.com/tech-resources/articles/mysql-storedprocedures.pdf
http://dev.mysql.com/tech-resources/articles/mysql-views.pdf
http://dev.mysql.com/tech-resources/articles/mysql-triggers.pdf
...
Рейтинг: 0 / 0
29.12.2005, 19:13:40
    #33465055
ОКТОГЕН
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MySQL 5.0.16 тригеры, процедуры, функции - сложная проверка
далее
1) я попытался воспользовался курсорами.
из триггера это не завелось почему-то, и я решил написать функцию проверки.
Она получает входной параметр - первичный ключ таблицы secondk, а
возвращает соответствующий ему fktest в этой же таблице.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
CREATE FUNCTION `test_key_secondk`(pk BIGINT)
    RETURNS BIGINT
    NOT DETERMINISTIC
    SQL SECURITY DEFINER
    COMMENT ''
BEGIN
DECLARE buf BIGINT UNSIGNED;
DECLARE CURMY CURSOR FOR SELECT 'secondk'.'fktest' FROM 'secondk' WHERE  'secondk'.'id'=pk;
OPEN CURMY;
FETCH CURNAME INTO buf;
RETURN buf;
END; 

ЗАМЕЧАНИЕ
сначала надо объявить переменные попроще, типа целые, после этого курсоры, наоборот будет ругаться матом. Запрос в курсоре ВСЕГДА возвращает одну запись для указанной БД
...
Рейтинг: 0 / 0
29.12.2005, 19:45:43
    #33465069
ОКТОГЕН
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MySQL 5.0.16 тригеры, процедуры, функции - сложная проверка
работающая функция
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
CREATE FUNCTION `testkey_secondk`(fk BIGINT)
    RETURNS bigint( 20 )
    NOT DETERMINISTIC
    SQL SECURITY DEFINER
    COMMENT ''
BEGIN
DECLARE buf BIGINT UNSIGNED;
DECLARE cru CURSOR FOR SELECT secondk.fktest FROM secondk
WHERE  secondk.id=fk;
OPEN cru;
FETCH cru INTO buf;
CLOSE cru;
RETURN buf;
END;
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / MySQL 5.0.16 тригеры, процедуры, функции - сложная проверка / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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